【发布时间】:2020-10-11 06:47:53
【问题描述】:
我正在为我的应用使用 Laravel 7 和 Sanctum 身份验证。
如何实现注销程序?
我用:
Auth::user()->tokens()->delete();
它可以工作,但它会删除该用户的所有令牌。 我只想删除请求注销的用户的令牌,这样其他会话应该保持打开状态
【问题讨论】:
我正在为我的应用使用 Laravel 7 和 Sanctum 身份验证。
如何实现注销程序?
我用:
Auth::user()->tokens()->delete();
它可以工作,但它会删除该用户的所有令牌。 我只想删除请求注销的用户的令牌,这样其他会话应该保持打开状态
【问题讨论】:
您需要指定用户:
// Revoke a specific user token
Auth::user()->tokens()->where('id', $id)->delete();
// Get user who requested the logout
$user = request()->user(); //or Auth::user()
// Revoke current user token
$user->tokens()->where('id', $user->currentAccessToken()->id)->delete();
Laravel 7, 8 的更新:
// Revoke the token that was used to authenticate the current request...
$request->user()->currentAccessToken()->delete();
// Revoke a specific token...
$user->tokens()->where('id', $tokenId)->delete();
【讨论】:
Auth::user()->tokens()->where('id', $id)->get('field_name')->first(); field_name 是您存储令牌的 column 名称。
$id = Auth::user()->id; 获取$id 所以它会是Auth::user()->tokens()->where('id', Auth::user()->id)->delete();
注销时,使用currentAccessToken()可以直接删除token。
$request->user()->currentAccessToken()->delete();
【讨论】:
User 模型上添加 HasApiTokens 特征
您可以使用三种不同的方法
// Revoke all tokens...
$user->tokens()->delete();
// Revoke the token that was used to authenticate the current request...
$request->user()->currentAccessToken()->delete();
// Revoke a specific token...
$user->tokens()->where('id', $tokenId)->delete();
【讨论】: