Отзыв неопределенного метода Laravel

#laravel #laravel-passport

#laravel #laravel-паспорт

Вопрос:

Я тестирую создание приложения, используя Laravel, Laravel passport и socialite для входа пользователей в систему и выхода из системы в vue SPA. Нет проблем с входом в систему и созданием пользователей, только когда я пытаюсь вывести пользователей из системы, я получаю сообщение об ошибке: вызов неопределенного метода: отзыв

Это в Auth LoginController:

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

Это в Api.php:

 Route::group(['middleware' => 'auth:api'], function(){
    Route::post('/logout', 'AuthLoginController@logout');
});
  

Это axios, вызываемый в vue SPA:

 logout() {
    axios.post('/api/logout')
    .then(res=>{
        console.log(res.data);
    });
}
  

Если отзыв сработает, я должен получить сообщение об успешном выходе из системы. Здесь приветствуется любая помощь.

Дополнительно: в моей функции LoginController handleProviderCallback для обработки логинов socialite у меня есть это

     auth()->login($user);
    $tokenResult = $user->createToken('Personal Access Token');
    $token = $tokenResult->token;
    $token->expires_at = Carbon::now()->addWeeks(1);
    $token->save();

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

В результате, когда пользователи нажимают на социальные логины, отображается токен доступа. Я всегда думал, что laravel_token из cookies — это JWT, который Laravel обрабатывает автоматически. Теперь я не очень уверен. Итак, если с помощью этого дополнительного кода токен доступа является правильным способом обработки JWT, как мне передать ответ в Vue, поскольку это перенаправление с socialite, а не запрос Axios?

После тестирования JWT я могу снова попробовать выйти из системы, чтобы увидеть, является ли проблема JWT.

Комментарии:

1. попробуйте использовать -> destroy(); вместо revoke.

2. результат тот же, неопределенный метод уничтожен

Ответ №1:

Вы уверены, что у пользователя есть токен? И используете ли вы HasApiTokens признак в своей пользовательской модели?

Комментарии:

1. да, пользовательская модель имеет ‘HasApiTokens’, а в базе данных есть токены личного доступа, выдаваемые при входе в систему

Ответ №2:

Я решил это с помощью Auth::logout () по умолчанию. Код для ‘личного токена доступа’ не требуется. В документации passport Laravel прикрепляет JWT к файлу cookie с именем laravel_token, который passport будет проверять, аутентифицирован ли пользователь.