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
相关产品推荐
相关产品推荐

