Как можно отозвать токен в мульти аутентификации в laravel?

написал метод входа и работал. мой конфиг аутентификации:

   'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users',
],
'admin-web' => [
'driver' => 'session',
'provider' => 'admins',
],
'admin-api' => [
'driver' => 'passport',
'provider' => 'admins',
],
],

написал метод выхода из системы, как:

 public function logout(Request $request)
{
Auth::guard('admin-web')->logout();
$value = $request->bearerToken();
$id = (new Parser())->parse($value)->getHeader('jti');
$token = $request->user()->tokens->find($id);
}

не могу найти токены в этой колонке:

    $token = $request->user()->tokens->find($id);

и ошибка:

Trying to get property 'tokens' of non-object

есть какое-то решение?

1

Решение

Как только вы позвоните Auth::guard('admin-web')->logout() Вы не сможете получить пользователя из запроса.
Вы должны получить токен перед выходом из системы:

public function logout(Request $request)
{
$value = $request->bearerToken();
$id = (new Parser())->parse($value)->getHeader('jti');
$token = $request->user('admin-web')->tokens->find($id);
Auth::guard('admin-web')->logout();
}
0

Другие решения

Используйте, как показано ниже, и проверьте это. Вы пропустили параметр $ id.

 public function logout(Request $request,$id)
{
$value = $request->bearerToken();
$id = (new Parser())->parse($value)->getHeader('jti');
$token = $request->user('admin-web')->tokens->find($id);
\Auth::guard('admin-web')->logout();
}
0

По вопросам рекламы [email protected]