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

Laravel中使用tymon/jwt-auth生成Refresh Token的实现方法

在Laravel中用tymon/jwt-auth同时返回Access Token和Refresh Token

嘿,刚好我之前做过类似的需求,tymon/jwt-auth本身就内置了生成refresh token的能力,不用额外折腾,给你一步步说怎么实现:

1. 确认配置(可选但建议)

首先检查你的config/jwt.php配置文件,确保以下两个参数是正常设置的:

  • 'ttl':Access Token的有效期(默认60分钟)
  • 'refresh_ttl':Refresh Token的有效期(默认20160分钟,也就是2周)
    你可以根据自己的业务需求调整这两个值,比如把refresh_ttl设为更大的数值,让用户不用频繁登录。

2. 修改登录逻辑,同时生成两个Token

既然你已经能通过JWTAuth::attempt($credentials)获取到access token,那只需要在这个基础上,调用JWTAuth::refresh()方法就能生成对应的refresh token了。

完整的示例代码大概是这样的:

use Illuminate\Http\Request;
use Tymon\JWTAuth\Facades\JWTAuth;

public function login(Request $request)
{
    // 验证用户提交的凭证(比如邮箱和密码)
    $credentials = $request->validate([
        'email' => 'required|email',
        'password' => 'required'
    ]);

    // 尝试生成access token
    if (!$token = JWTAuth::attempt($credentials)) {
        return response()->json(['error' => '无效的登录凭证'], 401);
    }

    // 生成对应的refresh token
    $refreshToken = JWTAuth::refresh($token);

    // 按照你想要的格式返回
    return response()->json([
        'jwt' => $token,
        'refresh_token' => $refreshToken
    ]);
}

3. 后续Refresh Token的使用(额外提示)

如果用户后续需要用refresh token获取新的access token,你可以写一个专门的接口:

public function refresh(Request $request)
{
    try {
        // 从请求中获取refresh token(可以放在请求头或者请求体里)
        $refreshToken = $request->input('refresh_token');
        // 生成新的access token
        $newToken = JWTAuth::refresh($refreshToken);

        // 这里也可以返回新的refresh token(可选,看你是否要滚动刷新有效期)
        return response()->json([
            'jwt' => $newToken,
            'refresh_token' => JWTAuth::refresh($newToken)
        ]);
    } catch (\Tymon\JWTAuth\Exceptions\TokenInvalidException $e) {
        return response()->json(['error' => '无效的Refresh Token'], 401);
    } catch (\Tymon\JWTAuth\Exceptions\TokenExpiredException $e) {
        return response()->json(['error' => 'Refresh Token已过期,请重新登录'], 401);
    }
}

注意事项

  • 确保你的用户模型已经正确实现了Tymon\JWTAuth\Contracts\JWTSubject接口(你已经能生成access token,应该已经做了这一步)
  • 记得在路由中给refresh接口加上合适的中间件,比如不需要auth中间件,但要验证refresh token的合法性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:06:11