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

Laravel Sanctum无法通过Cookie认证,请求返回401错误求助

问题:Sanctum令牌存入Cookie后仍出现401未授权错误

我在登录流程中为用户生成Sanctum令牌并存入Cookie返回给前端,后续所有API请求均携带该Cookie,但持续出现401未授权错误。

登录函数代码

class LoginController extends Controller
{
    public function handleLogin(Request $request)
    {
        // 获取请求中的Bearer令牌
        $accessToken = $request->bearerToken();
        
        // 调用Microsoft Graph API获取用户信息
        $response = Http::withHeaders([
            'Authorization' => 'Bearer ' . $accessToken,
        ])->get('https://graph.microsoft.com/v1.0/me');

        // return response()->json($response->json());
        // exit;

        // 检查请求是否成功
        if ($response->successful()) {
            $userData = $response->json();

            // 检查用户是否存在于数据库中
            $user = User::where('email', $userData['mail'])->first();

            // 如果用户不存在,创建新用户
            if (!$user) {
                $user = new User();
                $user->username = $userData['displayName'];
                $user->email = $userData['mail'];
                $user->credits = 0;

                // 根据邮箱域名设置用户角色
                if (strpos($userData['mail'], '@landstede.nl') !== false) {
                    $user->role = 'admin';
                } else {
                    $user->role = 'user';
                }
                
                $user->save();
            }

            // 使用Sanctum认证用户
            $token = $user->createToken('token')->plainTextToken;
            $cookie = cookie('auth-token', $token, 60 * 24, '/', null, true, true, false, 'None');

            // 返回包含令牌的Cookie
            return response()->json(['message' => 'User authenticated', 'user' => $user], 200)->withCookie($cookie);
        } else {
            // 如果调用Microsoft Graph API失败,返回错误响应
            return response()->json(['error' => 'Failed to retrieve user information from Microsoft Graph API'], $response->status());
        }
    }
}

路由配置

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/waitlist', [WaitlistController::class, 'getItems']);
    Route::post('/waitlist/delete/{id}', [WaitlistController::class, 'deleteItem']);
    Route::post('/waitlist/download', [WaitlistController::class, 'download']);

    Route::get('/users', [UserController::class, 'getUsers']);
})->middleware('web');

Route::get('/login', [LoginController::class, 'handleLogin']);

相关截图

  • 认证Cookie截图:
    认证Cookie截图

  • 请求头截图:
    请求头截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 22:17:05