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

如何用Laravel Passport的CreateFreshApiToken实现HttpOnly Cookie API认证

Laravel Passport HttpOnly Cookie认证问题解决

问题描述

我正在使用Laravel Passport,尝试将代码从本地存储token改为使用HttpOnly Cookie进行认证。我遵循了文档,在Kernel.php的web中间件组中添加了\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class。

我的AuthController中的login函数如下:

public function login(Request $request) {
    if(Auth::attempt(['email' => $request->email, 'password' => $request->password])){
        $user = Auth::user();
        $token = $user->createToken('API')->accessToken;
        
        return response()->json(['user' => $user], 200)->withCookie(
            'X-Secure-Token', 
            $token,
            null,
            null,
            null,
            false,
            true
        );
    } else {
        return response()->json(['message' => 'Unauthorized'], 401);
    }
}

登录后我在Postman中成功看到了X-Secure-Token Cookie,但访问受auth:api中间件保护的其他路由时,仍返回“Unauthenticated”提示,我已将请求的Authorization设置为“No Auth”。作为API开发新手,我该如何让Postman中的HttpOnly Cookie认证系统正常工作?


解决步骤

1. 修正登录接口逻辑

CreateFreshApiToken中间件会自动处理Cookie的生成与设置,你手动创建token并设置自定义Cookie的操作和它的逻辑冲突了。修改登录方法:

public function login(Request $request) {
    if(Auth::attempt(['email' => $request->email, 'password' => $request->password])){
        $user = Auth::user();
        // 移除手动生成token和设置Cookie的代码
        return response()->json(['user' => $user], 200);
    } else {
        return response()->json(['message' => 'Unauthorized'], 401);
    }
}

2. 确保路由使用正确中间件

  • 登录路由必须放在web中间件组下,这样CreateFreshApiToken才能生效,自动在响应中设置laravel_token Cookie。
  • 受保护的API路由需要同时使用web和auth:api中间件,示例:
    Route::middleware(['web', 'auth:api'])->group(function () {
        Route::get('/user/profile', [UserController::class, 'profile']);
    });
    

3. Postman配置调整

  • 发送登录请求时,确保Postman的Cookie自动保存功能开启(默认开启,会自动存储响应返回的Cookie)。
  • 后续访问受保护路由时,无需设置Authorization头,Postman会自动带上之前保存的laravel_token Cookie。
  • 如果是跨域场景,在Postman的请求设置中开启「Send cookies」,同时确保Laravel的CORS配置中supports_credentials设为true。

4. 可选:自定义Cookie名称(如需)

如果坚持使用自定义Cookie名称(如X-Secure-Token),在config/passport.php中添加配置:

'cookie' => 'X-Secure-Token',

保持CreateFreshApiToken在web中间件组中,登录后系统会自动设置该自定义Cookie,后续请求可自动读取认证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:31:11