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

Laravel Passport认证仅GET生效,PUT请求提示未认证问题求助

解决Ionic调用Laravel Passport API时PUT请求返回“Unauthenticated”的问题

嘿,我之前开发类似项目时也碰到过一模一样的问题!咱们从几个常见的排查点入手,一步步解决:

1. 检查Authorization头的格式

这是最容易踩的坑!Laravel Passport要求Authorization头必须是 Bearer {你的token} 格式,但你的代码里直接用了this.token,如果this.token只是纯token字符串,服务器根本识别不了这是Passport的认证凭证。

修改后的请求头应该是:

'Authorization': 'Bearer ' + this.token

2. 调整请求的Content-Type和数据格式

你当前用的是x-www-form-urlencoded类型,PUT请求在这种格式下,Laravel有时候会因为请求体解析的问题,导致认证中间件无法正确处理。建议换成application/json格式,同时把要提交的数据转成JSON字符串:

修改后的请求代码示例:

update(data) {
  let headers = new Headers({
    'Content-Type': 'application/json',
    'Accept': 'application/json',
    'Authorization': 'Bearer ' + this.token
  });

  return new Promise((resolve, reject) => {
    this.http.put(`${env.API_URL}/你的接口路径`, JSON.stringify(data), { headers: headers })
      .subscribe(
        response => resolve(response.json()),
        error => reject(error)
      );
  });
}

3. 确认Laravel端的路由和中间件配置

  • 确保你的PUT路由是定义在routes/api.php里的,并且使用了auth:api中间件:
    Route::put('/your-endpoint', 'YourController@update')->middleware('auth:api');
    
  • 检查config/auth.php里的api guard驱动是否设置为passport:
    'guards' => [
        'api' => [
            'driver' => 'passport',
            'provider' => 'users',
        ],
    ],
    

4. 排查跨域(CORS)问题

虽然GET请求正常,但PUT请求会触发预检OPTIONS请求,如果Laravel的CORS配置没有允许携带Authorization头,或者没有放行PUT方法,就会导致预检失败,最终PUT请求返回未认证。

修改config/cors.php配置:

return [
    'paths' => ['api/*'],
    'allowed_methods' => ['GET', 'POST', 'PUT', 'DELETE'],
    'allowed_origins' => ['*'], // 生产环境请替换成你的Ionic应用域名
    'allowed_headers' => ['Content-Type', 'Authorization', 'Accept'],
    'supports_credentials' => false,
];

调整完这些之后,再测试PUT请求应该就能正常通过认证了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:40