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

Laravel Passport令牌传递异常:前端请求返回Unauthenticated错误

问题分析与解决方案

这种情况我碰到过好多次,核心问题几乎都是你从session里取到的access_token和Postman里的有效令牌不一致,咱们一步步排查:

1. 先确认Session中的令牌是否有效

最直接的方式是在代码里先打印出$accessToken,对比Postman里的令牌是否完全一致:

public function global_Curl_Post($data , $url) {
    $server = env('API_ENDPOINT_NGINX_NAME') ?? 'https://digitalapps*****.example.com';
    $accessToken = session('access_token');

    // 关键调试:先看session里的令牌到底是什么
    dd($accessToken); // 把这个值和Postman的令牌对比

    // 剩下的代码保持不变...
}

大概率会发现以下几种情况:

  • Session里的令牌是空值(说明前端没把正确的令牌传过来,或者后端存session的逻辑有问题)
  • Session里的令牌是旧的、已过期的令牌
  • 令牌有多余的空格/换行符(比如前端传递时没处理好格式)

2. 修复令牌的传递与格式问题

如果发现令牌有格式问题,或者不确定是否有多余字符,可以给令牌加个trim()处理,同时确保Bearer和令牌之间的空格正确:

$headers = [
    "Accept:application/json", 
    "Content-Type:application/json", 
    "Authorization:Bearer ".trim($accessToken) // 去掉令牌前后的空白字符
];

3. 排查前端到后端的令牌传递流程

你需要确认:

  • 前端是否真的把正确的access_token传递给了后端?比如是通过AJAX请求头、表单字段还是URL参数传递的?
  • 后端存储session的逻辑是否正确?比如是不是在登录/获取令牌后,把access_token正确存入了session(['access_token' => $token])?

4. 检查Passport令牌类型与认证中间件

如果以上都没问题,再确认目标API的认证规则:

  • 目标API是不是要求使用个人访问令牌(Personal Access Token),而你前端获取的是密码授权令牌(Password Grant Token)?不同类型的令牌可能无法兼容特定的认证逻辑
  • 目标API的路由是否使用了auth:api中间件?你的令牌是否是通过Passport合法生成的?

带调试的优化版代码

把这些排查点整合到代码里,方便定位问题:

public function global_Curl_Post($data , $url) {
    $server = env('API_ENDPOINT_NGINX_NAME') ?? 'https://digitalapps*****.example.com';
    $accessToken = session('access_token');

    // 调试1:检查令牌是否存在
    if (empty($accessToken)) {
        dd('错误:Session中未获取到access_token,请检查前端传递与后端存储逻辑');
    }

    // 调试2:打印令牌对比Postman
    // dd('Session中的令牌:'.$accessToken);

    $headers = [
        "Accept:application/json", 
        "Content-Type:application/json", 
        "Authorization:Bearer ".trim($accessToken)
    ];

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $server.'/'.$url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
    $response = curl_exec($ch);
    // 调试3:检查curl请求本身是否有错误
    if(curl_errno($ch)){
        dd('Curl请求错误:'.curl_error($ch));
    }
    
    $responseData = json_decode($response);
    curl_close($ch);
    
    dd($responseData);
    return $responseData;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:27:20