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

已有的中间件:

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

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

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

阅读 4.2k
1 个回答

自己加个中间件
示例:

<?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年。。。一年前的问题。。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进