You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 11 API使用Sanctum授权时登出返回401未认证问题解决

Laravel 11 Sanctum 登出返回401问题排查方案

1. 确认登出路由的认证中间件

确保登出路由明确使用auth:sanctum中间件,而非其他守卫或未配置中间件:

// routes/api.php
use App\Http\Controllers\AuthController;
use Illuminate\Support\Facades\Route;

Route::post('/login', [AuthController::class, 'login']);
// 必须添加auth:sanctum中间件
Route::post('/logout', [AuthController::class, 'logout'])->middleware('auth:sanctum');

2. 检查Logout方法的正确实现

Sanctum基于Token认证,不能使用auth()->logout()(这是Session认证的登出方式),需针对Token操作:

// App/Http/Controllers/AuthController.php
use Illuminate\Http\Request;

public function logout(Request $request)
{
    // 删除当前请求使用的Token(推荐)
    $request->user()->currentAccessToken()->delete();
    
    // 或者删除该用户所有Token(适用于需强制下线所有设备的场景)
    // $request->user()->tokens()->delete();

    return response()->json(['message' => '登出成功'], 200);
}

3. 验证Postman请求的Token传递

  • 确保请求头包含Authorization: Bearer {your-token},其中{your-token}是登录接口返回的完整Token,注意Bearer后需加空格
  • 检查Token是否过期:可查看数据库personal_access_tokens表的expires_at字段,或在登录时确认Token有效期配置

4. 确认Sanctum守卫配置

检查config/auth.php中sanctum守卫的provider是否与用户模型匹配:

// config/auth.php
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'sanctum' => [
        'driver' => 'sanctum',
        'provider' => 'users', // 需与你的用户provider一致
    ],
],

5. 排查Token存储与状态

  • 登录成功后,查看personal_access_tokens表是否生成对应记录
  • 若执行登出后仍401,可先手动删除该表中对应Token,再重新登录测试

内容的提问来源于stack exchange,提问作者user27365176

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:17:15