Всем привет, сейчас попробовал то что вы говорили вроде получилось, проверил в самом конце скрипта, верное решение судить вам, код привожу: Спойлер: КонтроллерUser PHP: public function actionLogin() { # создаем объект класса User() $user = new User(); # Проверяем какой метод используется на веб странице if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) { # фильтруем данные $checkARGS = [ 'user_login' => FILTER_SANITIZE_STRING, 'user_password' => FILTER_SANITIZE_STRING ]; $inputFIELD = filter_input_array(INPUT_POST, $checkARGS); # Проверяем существует ли пользователь $userID = $user->checkUserData($inputFIELD['user_login'], $inputFIELD['user_password']); # проверяем на ошибки, если их нет попадаем в кабинет. if ($userID === true) { # Перенаправляем его в личный кабинет header("Location: /cabinet"); exit; }else{ $_SESSION['errors'][] = $userID; header('Location: /user/login'); exit; } } /*или такая запись if($user->isGuest() == true) обе работают, какая будет стабильней?*/ if($user->isGuest() === true) { # Подключаем наш шаблон require_once(ROOT . '/views/user/login.php'); return true; }else{ # Перенаправляем его в личный кабинет header("Location: /cabinet"); exit; } } И метод который проверяет гость или не гость в самом низу его вызываю и сверяю со значением true: PHP: public function isGuest() { if (isset($_SESSION['uid'])) { return false; } return true; } Правильно ли я делаю проверку user-а, на показ шаблона или редиректа?
в данный момент я спрашиваю за вывод шаблона и его проверку. а на счет пароля я его шифрую методом password_hash(), просто для него еще фильтр применил, ах да забыл, хешировать при проверки полей не думаю? Эта же фильтрация делается для проверки полей соответствуют ли они действительности данных, которые поступают в форму, если ошибаюсь поправте. еще вопрос, какая запись будет правильней? такая запись: PHP: if($user->isGuest() == true) или эквивалентна будет правильней? PHP: if($user->isGuest() === true) или вообще хватило бы и такой записи без сравнения? PHP: if($user->isGuest()) Вопрос на засыпку, нужна ли эта проверка при выводе формы например, редактирование данных или любой другой страницы?
Ну лично я бы первыми строчками сделал PHP: if (!$user->isGuest()) { # Перенаправляем его в личный кабинет header("Location: /cabinet"); exit; } Но так, как у тебя, тоже должно работать, по идее --- Добавлено --- Первыми сточками в Action, конечно же
а как закрыть страницу смены пароля? если он просто перешел по пути в адресной строке, вообще не догоняю, что проверить нужно, ключ или id? Этот метод с проверкой формы не подходит, всегда высвечивается форма. --- Добавлено --- так тоже сработало.
Аналогично. В начале нужной action ставишь проверку. В фреймворках есть механизмы, которые прямо на роутер вешаются (называются "посредники", middleware), но самостоятельно написать такой роутер - я не уверен, что ты потянешь
сделал вот таким образом: PHP: if(!$user->isGuest() && !isset($_SESSION['r_uid'])) { # Перенаправляем его в личный кабинет header("Location: /cabinet"); exit; } первая проверка проверяет является ли пользователь гостем, вторая проверка проверяет не находиться ли restore_uid в сессии если нет редирект на ту же страницу кабинет.
хорошо, с этим справился, вопрос такой, при проверке например ключа, я создаю ссессию и использую ее в другом контроллере, при успешном завершении, в какой момент мне нужно уничтожить сессию перед редиректом? --- Добавлено --- хотя так не работает, работает только по отдельности, сработало с оператором ИЛИ || почему так?
Странные дела творятся. Гость должен быть по умолчанию, условие обычно вешают на зарегистрированных пользователей
понимаешь если не проверить гость ли он, а на самом деле находится в кабинете, то он сможет открыть страницу доступную только гостям) и наоборот доступную только авторизованным, думаю всегда лучше проверять.
@_ne_scaju_, знаете почему некоторые люди при всём желании не смогут стать программистами? Просто у них нет логики.
ай то я вообще написал, например я сохранил в сессии ключ из базы ну или ID, при успешном завершении когда нужно уничтожать эти данные? --- Добавлено --- у меня логика присутствует)
смысле ужас, ты коротко написал, а в случае не удачи возврата нет у тебя мне вернуть нужно удачу или лож, а где в твоем случае лож? и вообще я уже проверку сделал, и она работает, оставил этот метод который ты критикуешь, хотя его можно меньше сделать в одну строку.
Чёта я не понимаю) В моем варианте если установлено значение $_SESSION['uid'], то будет false (не гость), не установлено - true (гость).
Ну намой взгляд тоже, глупо писать: PHP: if ($condition) { return true; } else { return false; } если можно просто PHP: return $condition;
да можно наверное, но так вообще будет не понятно что и зачем оно нужно) уж лучше видеть false или true. или ты советуешь писать так как мне показали?
Если знаешь php, то понятно. В целом, зависит от условия. И если условие укладывается в isset($_SESSION["user_id"]) - то безусловно. Если же какое-нибудь условие на 5-6 строчек, то лучше разбить на несколько операторов или даже функций. В твоём случае, всё понятно из названия функции.