简体   繁体   中英

How can revoke token in multi authenticate in laravel?

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

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM