@4sadly

Как правильно сделать аутентификацию пользователя?

Хочу сделать аутентификацию в классе пользователя, как лучше сделать?
Я думаю, что метод login в случае удачи должен возвращать экземпляр пользователя, правильно ли я думаю?
А метод проверки пароля? лучше сделать статическим или нет?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
rpsv
@rpsv
делай либо хорошо, либо никак
Если используете ActiveRecord, то делайте статически метод login(), который вернет данные пользователя. Метод проверки пароля тоже статический (он же не зависит от контекта).
-
А лучше вообще операции НАД пользователем (которые не работают с экземпляром пользователя) вынести в отдельный класс (например UserService), а операции ВНУТРИ пользователя (которые работают с данными пользователя) оставить в модели.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
megakor
@megakor
Go/PHP developer | Вконтакте
Что-то типа:

$user = User::where('login', $postData['login'])->first(); // На примере ORM Eloquent, тут ищется и возвращается экземпляр класса-модели пользователя с этим логином.

if (!$user || !password_verify($postData['password'], $user->password)) {
    throw new UserLoginException('Неверный логин или пароль!');
} else {
    $_SESSION['user_id'] = $user->id;

    Http::redirect('/profile');
}
Ответ написан
Комментировать
php666
@php666
PHP-макака
аутентификация - это не сфера класса пользователь
аутентификация - это сфера класса Authorization (или как хотите его назовите)

авторизация:
$auth = new Authorization(/* передаем объект запроса или _REQUEST */);
if ($auth->processAuthorization('login', 'password') {  // set cookies/sessions and redirect
// redirect to other
}


аутентификация:
$auth = new Authorization(/* передаем объект запроса или _REQUEST */);
$current_user = $auth->processAuthentication(); // или null если не аутентифицировались
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы