laravel jwt 中间件如何实现:先判断toekn有没过期,如果过期,然后再去刷新?

发布于 2022-09-06 23:26:47 字数 182 浏览 17 评论 0

已有的中间件:

'jwt.auth','jwt.check','jwt.refresh','jwt.renew'

要么直接认证toekn(jwt.auth),要么就直接刷新toekn(jwt.refresh)

那如何 先判断 toekn有没过期,如果过期,然后再去刷新?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤星 2022-09-13 23:26:47

自己加个中间件
示例:

<?php

namespace App\Http\Middleware;

use Closure;
use Tymon\JWTAuth\Exceptions\JWTException;
use Tymon\JWTAuth\Exceptions\TokenExpiredException;
use Tymon\JWTAuth\Http\Middleware\BaseMiddleware;

class RefreshToken extends BaseMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request $request
     * @param  \Closure                 $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $newToken = null;
        $this->auth->unsetToken();
        $this->checkForToken($request);
        try {
            $user = $this->auth->parseToken()->authenticate();
            if (!$user) {
                return response()->json([
                    'status_code' => 401,
                    'message'     => '未查询到该用户信息',
                    'time'        => time(),
                ], 401);
            }
        } catch (TokenExpiredException $e) {
            try {
            
                $newToken = $this->auth->refresh();

                $request->headers->set('Authorization', 'Bearer ' . $newToken); 
            } catch (JWTException $e) {
                // 过期用户
                return response()->json([
                    'status_code' => 401,
                    'message'     => '账号信息过期了,请重新登录',
                    'error'       => $e->getMessage(),
                    'time'        => time(),
                ], 401);
            }
        } catch (JWTException $e) {
            return response()->json([
                'status_code' => 401,
                'message'     => '登录信息已过期,请重新登录.',
                'error'       => $e->getMessage(),
                'time'        => time(),
            ], 401);
        }
        $response = $next($request);

        if ($newToken) {
            $response->headers->set('Authorization', 'Bearer ' . $newToken);
        }
        return $response;
    }
}

他人博客:https://www.jianshu.com/p/9e9...
看错了时间以为是19年。。。一年前的问题。。。。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文