Laravel Passport请求Auth Tokens无响应问题求助
解决Laravel Passport内部请求令牌无响应问题
你遇到的问题是内部Http请求阻塞,原因和对应解决方法如下:
1. 会话锁导致请求死锁
如果你的login方法使用了web中间件(默认带会话管理),当前请求会持有会话锁,而内部发起的oauth/token请求同样需要访问会话,就会造成死锁,请求一直卡住。
解决办法:
- 将
login接口移到api中间件组(对应routes/api.php),api中间件默认不启用会话; - 或者在发起Http请求前手动释放会话锁:
protected function login(Request $request) { // ... 其他业务逻辑 // 释放会话锁,避免内部请求阻塞 session()->save(); $response = Http::asForm() ->timeout(10) // 增加超时配置,便于排查问题 ->post(config('app.url').'/oauth/token', [ 'grant_type' => 'password', 'client_id' => '6', 'client_secret' => 'GQBBrsDJaV6GgO4uIoXUxOhgp7l7qdlnpB1Bpk5B', 'username' => 'test@test.com', 'password' => '123', 'scope' => '', ]); return $response->json(); }
2. 禁用SSL验证(本地开发场景)
如果本地环境使用http协议,但Http客户端默认尝试验证SSL证书,可能导致请求卡住。可以添加关闭验证的选项:
$response = Http::asForm() ->withOptions(['verify' => false]) ->post(...);
3. 避免硬编码URL
不要直接写http://localhost:8004,改用配置文件中的app.url,适配不同环境:
post(config('app.url').'/oauth/token', [...])
4. 强制设置超时时间
添加超时参数,让请求在指定时间内返回(或抛出错误),快速定位问题:
->timeout(10) // 设置10秒超时
内容的提问来源于stack exchange,提问作者Mai Rich
相关产品推荐
相关产品推荐

