Почему пользователь запроса пуст в моей функции выхода из системы? - PullRequest
0 голосов
/ 18 октября 2019

Я использую API аутентификации в Laravel, используя passport .

Я реализовал API входа в систему, но есть проблема с API выхода из системы. Мой код входа в систему работает успешно:

public function login(Request $request){
    $request->validate([
        'email'=> 'required|string|email',
        'password'=> 'required|string',
        'remember_me'=> 'boolean',
    ]);

    $credentials= request(['email','password']);

    if(!Auth::attempt(['email' => $request->email, 'password' => $request->password])){

        return response()->json([
            'message'=> 'Unauthorized'
        ],401);

    }
    Auth::attempt(['email' => $request->email, 'password' => $request->password]);
    $user=$request->user();

    $tokenResult = $user->createToken('Personal Access Token');
    $token = $tokenResult->token;

    if($request->remember_me)
        $token->expires_at= Carbon::now()->addWeek(1);

    $token->save();

    return response()->json([
        'access_token'=>$tokenResult->accessToken,
        'token_type'=>'Bearer',
        'expires_at'=>Carbon::parse($tokenResult->token->expires_at)
                        ->toDateTimeString()
    ]);
}

Это работает успешно, однако, когда я использую тот же токен на предъявителя для отзыва токена пользователя, я получаю следующее исключение:

Вызов функции-члена token () в null

Это относится к первой строке метода выхода из системы ниже.

public function logout(Request $request){
    $request->user()->token()->revoke();
    return response()->json([
        'message'=> 'Successfully logged out'
        ]);
}

Почемувывод $request->user() ноль?

1 Ответ

2 голосов
/ 18 октября 2019

Создайте токен для аутентифицированного пользователя, а не гостя, который сделал запрос

$user= auth()->user();
$tokenResult = $user->createToken('Personal Access Token');
$token = $tokenResult->accessToken;

И при отзыве

public function logout(Request $request)
{
  auth()->user()->token()->revoke();
  return response()->json([
      'message'=> 'Successfully logged out'
  ]);
}

Надеюсь, это поможет

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