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

Laravel Sanctum Cookie认证返回未授权问题排查求助

Laravel Sanctum Cookie认证"Unauthenticated"问题排查与解决

核心排查与修复点

1. 配置文件校验

  • sanctum.php:确认stateful数组包含你的请求域名(含端口,前后端分离场景必须加):

    'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
        '%s%s',
        'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
        env('APP_URL') ? ','.parse_url(env('APP_URL'), PHP_URL_HOST) : ''
    ))),
    

    本地测试时,前端端口(如3000)必须明确写入,不能只写localhost。

  • cors.php:强制开启supports_credentials,并指定允许的前端域名:

    'supports_credentials' => true,
    'allowed_origins' => ['http://localhost:3000'], // 替换为你的实际前端地址
    
  • session.php:本地开发环境下,domain设为null或.localhost,secure设为false:

    'domain' => env('SESSION_DOMAIN', null),
    'secure' => env('SESSION_SECURE_COOKIE', false),
    

2. 请求传递规则

  • 前端请求必须携带withCredentials: true(以Axios为例):

    axios.get('/api/user', { withCredentials: true })
    

    该参数会自动携带laravel_session和XSRF-TOKEN Cookie,这两个是Cookie认证的核心凭证,无需手动传递登录返回的auth_token——那个令牌是用于Bearer认证的,和Cookie认证逻辑无关。

  • 原生Fetch请求需手动处理XSRF:

    const xsrfToken = document.cookie.match(/XSRF-TOKEN=([^;]+)/)[1];
    fetch('/api/user', {
        headers: { 'X-XSRF-TOKEN': decodeURIComponent(xsrfToken) },
        credentials: 'include'
    });
    

3. 路由与登录逻辑修正

  • 受保护路由必须同时使用api和auth:sanctum中间件,禁止混用web中间件:

    Route::middleware(['api', 'auth:sanctum'])->get('/user', function (Request $request) {
        return $request->user();
    });
    
  • 登录逻辑必须触发Session创建,不能仅生成个人访问令牌:

    public function login(Request $request)
    {
        $credentials = $request->validate([
            'email' => 'required|email',
            'password' => 'required',
        ]);
    
        if (!Auth::attempt($credentials)) {
            return response()->json(['message' => 'Invalid credentials'], 401);
        }
    
        // Auth::attempt会自动创建Session,这是Cookie认证的关键
        return response()->json(['user' => Auth::user()]);
    }
    

    单纯调用$user->createToken()只会生成令牌记录,但不会创建Session,导致Cookie认证失效。

4. 快速验证步骤

  1. 清除浏览器缓存与Cookie,重新发起登录请求
  2. 打开浏览器开发者工具,确认请求Cookie包含laravel_session和XSRF-TOKEN
  3. 检查请求头是否存在X-XSRF-TOKEN(Axios自动携带)
  4. 查看后端日志storage/logs/laravel.log,定位具体认证报错信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:49:49