Как выйти из API с помощью паспорта laravel
В настоящее время я использую 2 проекта. 1 (с поддержкой laravel для связи с API) и другим проектом laravel (API).
Теперь я использую Laravel Passport для аутентификации пользователей и чтобы каждый вызов API был авторизованным.
Теперь, когда я хочу выйти из своего пользователя, я отправляю почтовый запрос в свой API (с маркером-носителем) и пытаюсь вывести его из API (и очистить сеанс, файлы cookie,...)
Затем на клиенте я также обновляю сеанс, чтобы токен больше не был известен. Теперь, когда я возвращаюсь на страницу входа в систему, он автоматически регистрируется у моего пользователя. (Или мой пользователь только что вошел в систему).
Может кто-нибудь объяснить мне, как правильно выходить из системы с помощью паспорта Laravel?
Спасибо заранее.
Ответы
Ответ 1
Вам нужно удалить токен из таблицы базы данных oauth_access_tokens
вы можете сделать это, создав новую модель типа OauthAccessToken
-
Запустите команду php artisan make:model OauthAccessToken
, чтобы создать модель.
-
Затем создайте связь между моделью User
и новой созданной моделью OauthAccessToken
в User.php
add:
public function AauthAcessToken(){
return $this->hasMany('\App\OauthAccessToken');
}
-
в UserController.php, создайте новую функцию для выхода из системы:
public function logoutApi()
{
if (Auth::check()) {
Auth::user()->AauthAcessToken()->delete();
}
}
-
В маршрутизаторе api.php создайте новый маршрут:
Route::post('logout','[email protected]');
- Теперь вы можете выйти из системы, вызвав проводку в URL
/api/logout
Ответ 2
Создайте маршрут для выхода из системы:
$router->group(['middleware' => 'auth:api'], function () use ($router) {
Route::get('me/logout', '[email protected]');
});
Создайте функцию выхода из системы в userController (или как указано в вашем маршруте)
public function logout() {
$accessToken = Auth::user()->token();
DB::table('oauth_refresh_tokens')
->where('access_token_id', $accessToken->id)
->update([
'revoked' => true
]);
$accessToken->revoke();
return response()->json(null, 204);
}
Ответ 3
Убедитесь, что в User
модели этот файл импортирован
use Laravel\Passport\HasApiTokens;
и вы используете черту HasApiTokens
с помощью
use HasApiTokens
внутри пользовательского класса. Теперь вы создаете маршрут выхода и в контроллере делаете это
$user = Auth::user()->token();
$user->revoke();
return 'logged out'; // modify as per your need
Это позволит выйти из системы с текущего устройства, с которого он запросил выход. Если вы хотите выйти из всех устройств, где он вошел. Затем сделайте это вместо
DB::table('oauth_access_tokens')
->where('user_id', Auth::user()->id)
->update([
'revoked' => true
]);
Это приведет пользователя к выходу из любого места. Это действительно помогает, когда пользователь меняет свой пароль с помощью параметра "Сбросить пароль" или "Забыли пароль", и вам нужно выйти из системы отовсюду.
Ответ 4
$request->user()->token()->revoke();
Ответ 5
Это пример кода, который я использую для выхода
public function logout(Request $request)
{
$request->user()->token()->revoke();
return response()->json([
'message' => 'Successfully logged out'
]);
}