Laravel 7 Sanctum 注销

问题描述 投票:0回答:5

我正在为我的应用程序使用 Laravel 7 和 Sanctum 身份验证。
我如何实施注销程序?
我用:

Auth::user()->tokens()->delete();

它可以工作,但是它会删除该用户的所有令牌。 我只想删除请求注销的用户的令牌,这样其他会话应该保持打开状态

laravel laravel-sanctum
5个回答
44
投票

您需要指定用户:

// 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、9、10 的更新

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

13
投票

注销时,如果使用currentAccessToken()可以直接删除token。

$request->user()->currentAccessToken()->delete();

9
投票

注销,在 Laravel 9 中

   use Laravel\Sanctum\PersonalAccessToken;


   // Get bearer token from the request
    $accessToken = $request->bearerToken();
    
    // Get access token from database
    $token = PersonalAccessToken::findToken($accessToken);

    // Revoke token
    $token->delete();

3
投票

对于遇到有关

currentAccessToken()
null 或未定义错误的人,请不要忘记将注销路由放入
auth:sanctum
中间件中。

所以使用后

$request->user()->currentAccessToken()->delete();

将注销路径设置为这样:

Route::middleware('auth:sanctum')->group( function () {
    Route::post('logout', [AuthController::class, 'signout']);
});

0
投票

假设您的所有令牌都用于身份验证:

$user = \auth('sanctum')->user();
foreach ($user->tokens as $token) {
    $token->delete();
}
© www.soinside.com 2019 - 2024. All rights reserved.