#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 будет проверять, аутентифицирован ли пользователь.