关于 jwt 刷新的疑惑

版本 laravel 5.7 + jwt 1.0.r3
环境 nginx + php 7.2 + mysql + redis

对比官方提供的中间件 和 论坛内探讨刷新的中间件 测试得出以下两种 刷新中间件的方法
继承错误基类 BaseMiddleware
完事就 JWTException 能抓到错误信息
TokenExpiredException , TokenBlacklistedException 之类的一点感觉都没有
方法1

    public function handle($request, Closure $next)
    {
        // 检查此次请求中是否带有 token,如果没有则抛出异常。
        $this->checkForToken($request);

        // 使用 try 包裹,以捕捉 token 过期所抛出的 TokenExpiredException  异常
        try {
            // 检测用户的登录状态,如果正常则通过
            if ($this->auth->parseToken()->authenticate()) {
                return $next($request);
            }
            throw new UnauthorizedHttpException('jwt-auth', '未登录');
        } catch (TokenExpiredException $exception) {
            // 此处捕获到了 token 过期所抛出的 TokenExpiredException 异常,我们在这里需要做的是刷新该用户的 token 并将它添加到响应头中
            try {
                // 刷新用户的 token
                $token = $this->auth->refresh();
                // 使用一次性登录以保证此次请求的成功 ps:自己测试的结果中没影响什么
                auth('api')->onceUsingId($this->auth->manager()->getPayloadFactory()->buildClaimsCollection()->toPlainArray()['sub']);
            } catch (JWTException $exception) {
                // 如果捕获到此异常,即代表 refresh 也过期了,用户无法刷新令牌,需要重新登录。
                throw new UnauthorizedHttpException('jwt-auth', $exception->getMessage());
            }
        }

        // 在响应头中返回新的 token
        return $this->setAuthenticationHeader($next($request), $token);
    }

方法2

public function handle($request, Closure $next)
    {
        $this->checkForToken($request);

        try {
            if ($this->auth->parseToken()->authenticate()){
                return $next($request);
            }
            $token = $this->auth->parseToken()->refresh();
        } catch (JWTException $e) {
            throw new UnauthorizedHttpException('jwt-auth', "请重新登录", $e, $e->getCode());
        }

        $response = $next($request);

        // Send the refreshed token back to the client.
        return $this->setAuthenticationHeader($response, $token);
    }

疑惑
参考文章 使用 Jwt-Auth 实现 API 用户认证以及无痛刷新访问令牌

客户端检测到 response 是否存在新的 Authorization 然后再去请求一次吗? 恳请大佬指点

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 5
liyu001989

没太看懂你的问题,能整理一个具体的问题吗?你是对机制不了解,不知道怎么使用?

5年前 评论

@liyu001989 调试这个用了两天 对提问有点迷糊了,抱歉 ,我整理了一些我的问题 , 就是关于 token 刷新的问题, 看文档和官方代码搞得迷糊咧, 以我目前调试的结果得出 'refresh_ttl' 这个并没有实际用途,还有 jwt 提供的几个获取异常的类 也并没有作用 还是我使用不当呢? 只见到 JWTException 能正常抓出错误,

5年前 评论

@liyu001989 有点冒昧,能否请您讲讲您的用法或者方式

5年前 评论
liyu001989

文章:

视频:

小程序的教程中有如何对接。这么多可以学习的地方,我觉得你不应该得出 “'refresh_ttl' 这个并没有实际用途” 这样的结论。

5年前 评论

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