Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Приветствую всех! Я реализовал аутенификацию пользователя через Ajax, но проблема в том что после пару обновлений страницы, пользователя автоматически выбрасывает из аутентификации.
Тоесть пользователь вводит данные, они проходят валидацию и проходят проверку Auth::attempt. Пользователь зарегистрирован в БД и вводимые данные верны. Но я не понимаю как сохранить его в сессий( или как это делается правильно через Ajax ).
Вот код метода login который обрабатывает данные формы авторизации, отправленные через ajax:
public function login(Request $request)
{
$inputData = $request->all();
$email = $inputData['email_auth'];
$password = $inputData['pass_auth'];
//Валидация
$validator = Validator::make(
array(
'email' => $email,
'password' => $password,
),
array(
'email' => 'required|email|max:250',
'password' => 'required|min:6',
),
array(
'email.required' => '<p class="error">Введите Ваш E-mail</p>',
'email.max' => '<p class="error">Слишком длинный e-mail</p>',
'email.email' => '<p class="error">Неправильный формат e-mail</p>',
'password.required' => '<p class="error">Введите Ваш пароль</p>',
'password.min' => '<p class="error">Короткий пароль</p>',
)
);
if($validator->fails()){
return response()->json([
'fail' => true,
'errors' => $validator->getMessageBag()->toArray()
]);
}else{
// If the class is using the ThrottlesLogins trait, we can automatically throttle
// the login attempts for this application. We'll key this by the username and
// the IP address of the client making these requests into this application.
$throttles = $this->isUsingThrottlesLoginsTrait();
if(Auth::attempt(['email' => $email, 'password' => $password])){
if(Auth::attempt(['email' => $email, 'password' => $password, 'status' => 1])){
//=========== Аутентификация прошла успешно ============
$throttles = $this->isUsingThrottlesLoginsTrait();
if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
$credentials = $this->getCredentials($request);
if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) {
return $this->handleUserWasAuthenticated($request, $throttles);
}
// If the login attempt was unsuccessful we will increment the number of attempts
// to login and redirect the user back to the login form. Of course, when this
// user surpasses their maximum number of attempts they will get locked out.
if ($throttles && ! $lockedOut) {
$this->incrementLoginAttempts($request);
}
//Возвращаем результат
return response()->json([
'success' => true,
'throttles' => $throttles,
'email' => $email,
]);
}else{
return response()->json([
'fail' => true,
'errors' => ['<p class="error">Вы еще не подтвердили свой E-mail</p>']
]);
}
}else{
return response()->json([
'fail' => true,
'errors' => ['<p class="error">Неверный E-mail и/или пароль</p>']
]);
}
}
}
Но, в таком случае после пару обновлений страницы метод Auth::check() выдает false.
В общем вопрос такой: Как сохранить пользователя при аутентификации через Ajax ?
Не в сети
Но, в таком случае после пару обновлений страницы метод Auth::check() выдает false.
Что значит после пары обновлений Auth::check() выдаёт false?
Либо в логике приложения где-то ошибка, либо сессия умирает - конфиг session.lifetime
Не в сети
И убедись что работает middleware
\Illuminate\Session\Middleware\StartSession::class,
Не в сети
sergiu920 пишет:Но, в таком случае после пару обновлений страницы метод Auth::check() выдает false.
Что значит после пары обновлений Auth::check() выдаёт false?
Либо в логике приложения где-то ошибка, либо сессия умирает - конфиг session.lifetime
Auth::check() выдаёт false, значит что пользователь не залогинен. То есть после того как пользовтаель аутенифицировался, то после пару обновлений страниц его аутентификация исчезает и ему опять нужно аутентифицироваться.
У session.lifetime стоит значение 120
Не в сети
И убедись что работает middleware
\Illuminate\Session\Middleware\StartSession::class,
А как убедиться что он работает ?
Не в сети