热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

laravel中使用jwt,当使用常驻进程时jwt的第二次验证失效是什么原因

背景:laravel中嵌入workerman,当ws服务端收到指定消息时会发送一个post请求到laravel的一个验证接口(主要是验证jwttoken是否有效),过期后自动刷新tok

背景:
laravel中嵌入workerman,当ws服务端收到指定消息时会发送一个post请求到laravel的一个验证接口(主要是验证jwt token是否有效),过期后自动刷新token,现在的问题是,在第一次验证过期刷新是正常的,后面的token全都是即使过期了也是正常相应,用postman测试接口是正常的。
下面调试打印$users后面几次都是有结果



验证token的中间件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64



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);

            }

            var_dump($user); //   后面几次user都是有信息的

        } 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) {

            var_dump('JWTException 65');

            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;

    }

}

初步怀疑是ws常驻进程导致变量内存没释放?





   



推荐阅读
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有