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

Laravel 11 Passport令牌请求超时,排查配置缺失问题

Laravel 11 Passport 认证系统 cURL 超时问题排查

问题描述

我正在使用Laravel 11搭建Passport认证系统,执行了以下操作:

  • 执行安装命令:php artisan install:api --passport
  • 创建密码授权客户端:php artisan passport:client --password,按提示完成后生成客户端ID和密钥并配置到.env文件
  • 在config/auth.php中配置api驱动为passport
  • 在AppServiceProvider的boot方法中添加Passport::enablePasswordGrant();

随后在api.php中编写/login路由,通过Http请求调用http://127.0.0.1:8000/oauth/token获取令牌,但使用Postman请求/api/login时出现错误:

cURL error 28: Operation timed out after 30006 milliseconds with 0 bytes received (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://127.0.0.1:8000/oauth/token

请问我的配置是否存在遗漏?

可能的原因及解决方法

1. 本地请求阻塞问题

如果使用php artisan serve启动单进程开发服务器,在Laravel内部通过Http客户端请求自身服务会导致请求阻塞超时。解决方式:

  • 启动多进程开发服务器:php artisan serve --workers=2
  • 直接调用Passport内部逻辑生成令牌,无需请求外部端点,示例代码:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

Route::post('/login', function (Request $request) {
    $credentials = $request->validate([
        'email' => 'required|email',
        'password' => 'required',
    ]);

    if (!Auth::attempt($credentials)) {
        return response()->json(['message' => '无效的登录凭证'], 401);
    }

    $user = Auth::user();
    $token = $user->createToken('AuthToken');

    return response()->json([
        'access_token' => $token->plainTextToken,
        'token_type' => 'Bearer',
        'expires_at' => $token->accessToken->expires_at->toDateTimeString(),
    ]);
});

2. 服务地址或端口问题

  • 确认Laravel开发服务器确实在127.0.0.1:8000运行,无端口占用情况
  • 若使用Valet、Homestead等环境,替换请求地址为对应域名(如http://your-app.test/oauth/token)

3. 配置遗漏检查

  • 确认.env文件中PASSPORT_CLIENT_ID和PASSPORT_CLIENT_SECRET与生成的密码客户端信息完全一致
  • 确认用户模型已引入Laravel\Passport\HasApiTokens trait:
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;
}
  • 确认config/auth.php中api guard配置正确:
'guards' => [
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

4. cURL超时设置调整

在发起Http请求时手动缩短超时时间,避免无意义等待:

$response = Http::timeout(10)->post('http://127.0.0.1:8000/oauth/token', [
    'grant_type' => 'password',
    'client_id' => env('PASSPORT_CLIENT_ID'),
    'client_secret' => env('PASSPORT_CLIENT_SECRET'),
    'username' => $request->email,
    'password' => $request->password,
    'scope' => '',
]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:41:08