在我的单元测试中,我为一个用户生成了一个令牌:
$tokenString = $this->user->createToken('PHPunit', ['example'])->accessToken;
之后如何删除此用户的令牌?
bxjv4tth1#
这是当用户注销时我所做的。
public function logout() { Auth::user()->tokens->each(function($token, $key) { $token->delete(); }); return response()->json('Successfully logged out'); }
此代码将删除用户生成的每个令牌。
bvjxkvbb2#
我认为类似下面的代码可以撤销令牌:
$this->user->token()->revoke()
基于this link。
ygya80vv3#
Laravel Sanctum的文档说明了3种不同的方法来撤销令牌。你可以在这里找到它。但在大多数情况下,我们只是通过以下方式撤销所有用户的令牌:
// Revoke all tokens... auth()->user()->tokens()->delete();
注意:由于某种原因,intephense给出了一个错误,说tokens()方法未定义,但代码工作正常。Hirotaka Miyata找到了一个变通方案here。所以overall logout方法可以是这样的:
public function logout() { //the comment below just to ignore intelephense(1013) annoying error. /** @var \App\Models\User $user **/ $user = Auth::user(); $user->tokens()->delete(); return [ 'message' => 'logged out' ]; }
zrfyljdw4#
最佳解决方案是
public function logout(LogoutRequest $request): \Illuminate\Http\JsonResponse { if(!$user = User::where('uuid',$request->uuid)->first()) return $this->failResponse("User not found!", 401); try { $this->revokeTokens($user->tokens); return $this->successResponse([ ], HTTP_OK, 'Successfully Logout'); }catch (\Exception $exception) { ExceptionLog::exception($exception); return $this->failResponse($exception->getMessage()); } } public function revokeTokens($userTokens) { foreach($userTokens as $token) { $token->revoke(); } }
edqdpe6u5#
public function __invoke(Request $request) { $request->user() ->tokens ->each(function ($token, $key) { $this->revokeAccessAndRefreshTokens($token->id); }); return response()->json('Logged out successfully', 200); } protected function revokeAccessAndRefreshTokens($tokenId) { $tokenRepository = app('Laravel\Passport\TokenRepository'); $refreshTokenRepository = app('Laravel\Passport\RefreshTokenRepository'); $tokenRepository->revokeAccessToken($tokenId); $refreshTokenRepository->revokeRefreshTokensByAccessTokenId($tokenId); }
5条答案
按热度按时间bxjv4tth1#
这是当用户注销时我所做的。
此代码将删除用户生成的每个令牌。
bvjxkvbb2#
我认为类似下面的代码可以撤销令牌:
基于this link。
ygya80vv3#
Laravel Sanctum的文档说明了3种不同的方法来撤销令牌。你可以在这里找到它。
但在大多数情况下,我们只是通过以下方式撤销所有用户的令牌:
注意:由于某种原因,intephense给出了一个错误,说tokens()方法未定义,但代码工作正常。Hirotaka Miyata找到了一个变通方案here。
所以overall logout方法可以是这样的:
zrfyljdw4#
最佳解决方案是
edqdpe6u5#