Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 01.12.2016 13:54:32

Аутентификация через Ajax - сохранение пользователя в сессию

Приветствую всех! Я реализовал аутенификацию пользователя через 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 ?

Не в сети

#2 01.12.2016 14:29:45

Re: Аутентификация через Ajax - сохранение пользователя в сессию

sergiu920 пишет:

Но, в таком случае после пару обновлений страницы метод Auth::check() выдает false.

Что значит после пары обновлений Auth::check() выдаёт false?
Либо в логике приложения где-то ошибка, либо сессия умирает - конфиг session.lifetime

Не в сети

#3 01.12.2016 14:30:59

Re: Аутентификация через Ajax - сохранение пользователя в сессию

И убедись что работает middleware

    \Illuminate\Session\Middleware\StartSession::class,

Не в сети

#4 07.12.2016 12:34:03

Re: Аутентификация через Ajax - сохранение пользователя в сессию

covobo пишет:
sergiu920 пишет:

Но, в таком случае после пару обновлений страницы метод Auth::check() выдает false.

Что значит после пары обновлений Auth::check() выдаёт false?
Либо в логике приложения где-то ошибка, либо сессия умирает - конфиг session.lifetime

Auth::check() выдаёт false, значит что пользователь не залогинен. То есть после того как пользовтаель аутенифицировался, то после пару обновлений страниц его аутентификация исчезает и ему опять нужно аутентифицироваться.

У  session.lifetime стоит значение 120

Не в сети

#5 07.12.2016 12:34:53

Re: Аутентификация через Ajax - сохранение пользователя в сессию

covobo пишет:

И убедись что работает middleware

    \Illuminate\Session\Middleware\StartSession::class,

А как убедиться что он работает ?

Не в сети

Подвал раздела