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

如何使用Laravel Passport创建刷新令牌?登录生成的令牌失效问题

Laravel 生成有效刷新令牌的解决方案

你之前用$user->createToken('Laravel')->accessToken生成的是个人访问令牌,这类令牌默认没有刷新功能。要实现可刷新的令牌,得用Laravel Passport的密码授权模式,步骤如下:

1. 创建密码授权客户端

在项目中运行命令创建密码授权类型的客户端:

php artisan passport:client --password

按提示输入客户端名称(比如Mobile App),回调地址可填http://localhost(测试环境用)。执行完成后会得到client_id和client_secret,将这两个值配置到.env文件中:

PASSPORT_CLIENT_ID=你的客户端ID
PASSPORT_CLIENT_SECRET=你的客户端密钥

2. 调整登录逻辑,获取带刷新令牌的响应

不要再直接调用$user->createToken(),而是通过Passport的oauth/token端点发起请求,获取包含刷新令牌的完整响应:

use Illuminate\Support\Facades\Http;
use Illuminate\Http\Request;

public function login(Request $request)
{
    // 验证用户账号密码
    if (!auth()->attempt($request->only('email', 'password'))) {
        return response()->json(['message' => '账号或密码错误'], 401);
    }

    $user = auth()->user();
    // 向Passport令牌端点请求
    $response = Http::asForm()->post(config('app.url').'/oauth/token', [
        'grant_type' => 'password',
        'client_id' => env('PASSPORT_CLIENT_ID'),
        'client_secret' => env('PASSPORT_CLIENT_SECRET'),
        'username' => $user->email,
        'password' => $request->password,
        'scope' => '',
    ]);

    return $response->json();
}

返回的JSON会包含access_token、refresh_token、expires_in(令牌有效期,单位秒)等字段,前端需保存refresh_token用于后续刷新操作。

3. 用刷新令牌获取新的访问令牌

当access_token过期后,调用以下逻辑获取新的令牌:

use Illuminate\Support\Facades\Http;
use Illuminate\Http\Request;

public function refreshToken(Request $request)
{
    $response = Http::asForm()->post(config('app.url').'/oauth/token', [
        'grant_type' => 'refresh_token',
        'client_id' => env('PASSPORT_CLIENT_ID'),
        'client_secret' => env('PASSPORT_CLIENT_SECRET'),
        'refresh_token' => $request->refresh_token,
        'scope' => '',
    ]);

    return $response->json();
}

该请求会返回新的access_token和更新后的refresh_token。

关键说明

  • 确保已完成Laravel Passport基础配置:安装依赖后运行php artisan passport:install,并在User模型中引入Laravel\Passport\HasApiTokens trait。
  • 个人访问令牌(createToken生成)适用于后台管理、第三方服务调用等无需频繁刷新的场景,不适合前端用户登录的刷新需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:45:34