护照,过期后刷新令牌的方法

时间:2020-03-01 12:02:37

标签: laravel vue.js laravel-passport

我正在使用laravel v5.8,VueJS和护照v7.4进行身份验证。 下面是我的登录功能:

  public function login(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'email' => 'required|string|email',
            'password' => 'required|string',
        ]);

        if ($validator->fails()) {
            return response([
                'status' => 0,
                'message' => $validator->errors()->first()
            ]);
        }

        $credentials = request(['email', 'password']);

        if (!Auth::attempt($credentials))
            return response()->json([
                'status' => 0,
                'message' => 'Unauthorized'
            ], 401);


        $user = $request->user();

        $tokenResult = $user->createToken('authToken');
        $token = $tokenResult->token;
        $token->save();

        $user_role = Auth::user()->user_type;
        $user->assignRole($user_role);

        return response()->json([
            'status' => 1,
            'access_token' => $tokenResult->accessToken,
            'token_type' => 'Bearer',
            'expires_at' => Carbon::parse(
                $tokenResult->token->expires_at
            )->toDateTimeString(),
        ]);
    }

我的问题是我的令牌在10秒后过期(这是出于测试目的)。因此,我使用VueJS中的以下函数来检查令牌是否过期的所有路径:

 isValid(token) {
        const payload = this.payload(token);
        if (payload) {
            const datetime = Math.floor(Date.now() / 1000);
            return payload.exp >= datetime ? true : false;
        }
        return false;
    }

所以这很好用,但是我应该怎么做才能刷新令牌? 我们可以制作一个中间件来自行处理吗? 还是有办法检测用户是否正在积极使用该应用程序,例如 在基于正常会话的身份验证中?

1 个答案:

答案 0 :(得分:1)

好像您正在重新发明轮子,我建议您向护照/ oauth / token发出请求,然后将其返回access_token并刷新令牌。为了摆脱构建身份验证控制层,我正在使用nuxtjs。

下面的示例需要guzzlehttp / guzzle软件包。

$ g++ -std=c++17 -O2 -Q --help=optimizers 2>&1 |grep enabled |wc -l
135