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

如何在Laravel 11中使用Sanctum从会话认证切换到令牌认证?

Laravel 11 Sanctum 从会话认证迁移到Bearer令牌认证步骤

1. 确认Sanctum基础配置

确保Laravel Sanctum已正确安装并配置:

  • 检查config/sanctum.php文件存在,若缺失可重新发布配置:
    php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
    
  • Laravel 11默认已集成Sanctum中间件,无需手动在app/Http/Kernel.php中添加。

2. 调整认证守卫配置

修改config/auth.php,将api守卫的驱动切换为sanctum:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'sanctum', // 替换原session驱动
        'provider' => 'users',
        'hash' => false,
    ],
],

3. 更新路由中间件

将API路由中使用的会话认证中间件(如auth或web)替换为auth:sanctum:

  • 打开routes/api.php,调整受保护路由的中间件:
    // 原会话认证路由示例
    // Route::get('/user', function (Request $request) {
    //     return $request->user();
    // })->middleware('auth');
    
    // 修改为令牌认证路由
    Route::get('/user', function (Request $request) {
        return $request->user();
    })->middleware('auth:sanctum');
    

4. 实现令牌生成逻辑

添加用户登录并返回Bearer令牌的接口:

  • 创建或修改app/Http/Controllers/AuthController.php,编写登录方法:
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    
    public function login(Request $request)
    {
        $credentials = $request->validate([
            'email' => 'required|email',
            'password' => 'required',
        ]);
    
        if (!Auth::attempt($credentials)) {
            return response()->json(['message' => '无效凭据'], 401);
        }
    
        $user = Auth::user();
        $token = $user->createToken('api-access-token')->plainTextToken;
    
        return response()->json([
            'token' => $token,
            'token_type' => 'Bearer',
        ]);
    }
    
  • 在routes/api.php中注册无需认证的登录路由:
    Route::post('/login', [AuthController::class, 'login']);
    

5. 适配客户端请求

客户端请求API时,需在请求头中携带令牌:

Authorization: Bearer {你的令牌内容}
  • 移除之前会话认证相关的Cookie携带逻辑,确保请求仅依赖Bearer令牌。

6. 测试令牌认证

使用curl或API测试工具验证流程:

  1. 发送登录请求获取令牌:
    curl -X POST http://your-app-url/api/login -H "Content-Type: application/json" -d '{"email":"user@example.com","password":"your-password"}'
    
  2. 使用返回的令牌访问受保护路由:
    curl http://your-app-url/api/user -H "Authorization: Bearer {获取到的令牌}"
    

7. 清理冗余配置(可选)

  • 若不再需要会话认证,可移除API路由中多余的web中间件;
  • 无需SPA认证时,可在config/sanctum.php中清空stateful域名列表:
    'stateful' => [],
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:08:25