How can revoke token in multi authenticate in laravel?

1.4k Views Asked by At

I wrote a login method, and it worked. My auth config:

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

The I wrote a logout method like:

 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);
    }

but it fails to find tokens in this column:

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

and throws an error:

Trying to get property 'tokens' of non-object
2

There are 2 best solutions below

6
Remul On

As soon as you call Auth::guard('admin-web')->logout() you will not be able to retrieve the user from the request. You have to retrieve the token before logging out the user:

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();
}
5
munazzil On

Use as like below and check it back You have missed the $id parameter.

 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();
  }