Laravel: проблема при входе в пользовательский объект через запрос AJAX - PullRequest
1 голос
/ 01 февраля 2020

Я пытаюсь изменить свой логин на OTP.

Я отправлю пользователю токен по SMS. Пользователь вводит токен и отправляет для проверки в бэкэнд через AJAX.

Это функция, которая проверяет код:

function verify_token(Request $request){
    $token = LoginToken::where('token' , $request->input('token') )->first();
    if(!$token)
        jerror("cant find the token !") ;

    $user = User::findOrFail($token->user_id);
    Auth::loginUsingId($token->user_id);

    echo json_encode(['success'=>1 , 'redirect'=>URL('/')]);
}

Вот мой AJAX вызов, игнорируйте синтаксические ошибки:

function vrify(){
    let form = {
        token : $('#token').val() , 
        //csrf token 
    };

    $.post( '{{route("verify")}}' ,  form , function(data){
        data = $.parseJson(data);
        if(data.success == 1 )
        {
            document.location = data.redirect ; 
        }
    })
}

Несмотря на то, что проверка прошла успешно, пользователь не войдет в систему после перенаправления.

Если я отправляю данные как обычную форму POST и изменяю последнюю строку функции проверки:

return redirect(URL('/'));

Работает нормально!

Что я делаю не так?

Ответы [ 4 ]

1 голос
/ 04 февраля 2020

Измени свою линию

 echo json_encode(['success'=>1 , 'redirect'=>URL('/')]);

на

return response()->json(['success' => 1, 'redirect' => URL('/')]);
1 голос
/ 04 февраля 2020

Попробуйте использовать return response()->json(['success' => 1, 'redirect' => URL('/')]); вместо echo.

Кроме того, попробуйте Auth::login($token) вместо Auth::loginUsingId($token->user_id).

Также обратите внимание, что по умолчанию Auth::loginUsingId() принимает основной ключ. (https://laravel.com/docs/5.0/authentication#authenticating -Пользователи )

0 голосов
/ 04 февраля 2020

Если пользователь не вошел в систему после перенаправления, вы в основном не сохраняете его учетные данные, таким образом, не имея сеанса входа в систему. Как сказал @omidkhaleghi, вы можете установить httponly cook ie, содержащий токен, который будет использоваться в вашем запросе, поскольку аутентификация / промежуточное программное обеспечение также играет здесь свою роль / Что касается проверки, если пользователь вошел в систему, можно просто проверить, существует ли повар ie и есть ли токен.

Также отметьте этот . Я думаю, что это может помочь вам.

0 голосов
/ 01 февраля 2020

Я думаю, вы должны установить повар ie. потому что после входа в систему laravel установите cook ie из заголовков и проверьте аутентификацию по нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...