JWT 刷新操作写在 middleware ('auth:API') 是否是 bug? 请管理管处理

无论是第三本教材 还是 jwt的案例代码,都是把刷新操作放在了 middleware(‘auth:api’)中,
如:

    public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login']]);
    }

    public function refresh()
    {
        return $this->respondWithToken(auth()->refresh());
    }

    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth()->factory()->getTTL() * 60
        ]);
    }

那么问题来了 如果失效的 JWT_TTL 是 1分钟 而JWT_REFRESH_TTL是10分钟,

在2分钟后 token 肯定失效了, 但是根JWT_REFRESH_TTL10分钟 我们可以请求刷新一个新的token,但是 refresh 方法写在了 登陆后的操作中,那么本身失效了,无法登陆成功,又怎么才能去请求一个新的token呢?

各位 经过好几遍的测试 确实真的不行 在middleware(‘auth:api’)中的refresh方法,只要一分钟时间到了,肯定请求不出新的token,只有在不是登陆后的外面进行换取token才可以!!!!!!!

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 7

是的,所以你要在token生效时间内去刷新

3年前 评论
liuhaiqiang999 (楼主) 3年前
justlovelmn (作者) 3年前
liuhaiqiang999 (楼主) 3年前

刷新 token 的用途是在 token 即将过期之前换取一个新的token, 以实现无痛刷新。 如果 token 已经过期就不存在刷新 token 的问题,应该是重新登录获取 token 了。 理解这个场景再去设置相应的参数自然就明白了。

3年前 评论
zxdstyle (作者) 3年前
zxdstyle (作者) 3年前
liuhaiqiang999 (楼主) 3年前

file@zxdstyle 您看下

3年前 评论
zxdstyle 3年前

@zxdstyle 实在不好意思 还是要 请教下 这个文章下面关于 时间的我看了, 那么有个问题哈,

  1. 在实际的发开中,比如小程序,用的手机验证码登陆,JWT_TTL = 60, 如果用户在60分钟内没有操作,也就没有去刷新个新的token出来,那么是不是要重新登陆?

file 然后你可以一直循环获取,直到总时间超过 20160 分钟,不能再获取。 请问这句话是怎么理解啊?比如50分钟刷了次 40分钟刷了次 是不是总时间用了90分钟》

3年前 评论
zxdstyle 3年前
liuhaiqiang999 (作者) (楼主) 3年前
liuhaiqiang999 (作者) (楼主) 3年前
zxdstyle 3年前
liuhaiqiang999 (作者) (楼主) 3年前
zxdstyle 3年前
liuhaiqiang999 (作者) (楼主) 3年前

用户登录态失效有两种情况,这也是token为什么有两种过期时间 JWT_TTLJWT_REFRESH_TTL

JWT_TTL是代表当前token的失效时间,在这个时间之内你的登录态是正常的,这个时间到了,你可以用旧token去换新token

JWT_REFRESH_TTL 是代表token的刷新上限时间,在这个时间内,你可以正常刷新token,举个例子,你 JWT_TTL定义为120(2个小时),JWT_REFRESH_TTL定义为1440(24个小时),那么24个小时之内你可以最少需要换1440/120-1次token,这个时间到了那就需要重新登录了,

无痛刷新有两种方案,一种是教程的,通过前端的过期时间判断当前token是否失效,然后去主动请求刷新token的接口,另一种就是通过中间件先判断登录态,根据抛出的异常去决定是刷新token还是重新登录,两种方案各有利弊,看需求取舍

3年前 评论
liuhaiqiang999 (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!