Strapi JWT令牌寿命?

时间:2020-07-17 04:26:51

标签: javascript jwt strapi

我找不到有关JWT令牌寿命的任何信息,在Strapi CMS上有效的有效期是多长时间?

当无效时,如何自动刷新令牌?

在获得有关令牌生命周期结束的证据之前,我该如何进行令牌验证? Endpoit链接的名称是什么?

3 个答案:

答案 0 :(得分:1)

我非常有信心默认期限为30天,并且无法使用刷新令牌重新发布。

我认为这是一个未解决的问题。您可以在此处查看更多信息:
https://github.com/strapi/strapi/issues/1676#issuecomment-409575253

这是未来更新的路线图:
https://portal.productboard.com/strapi/1-public-roadmap/c/34-refresh-token-jwt

答案 1 :(得分:0)

这是目前的解决方案,刷新令牌需要身份验证,我的解决方案是在旧令牌过期后使用Axios Interceptor创建一个新令牌。

后端

我已经覆盖了 verify 方法,所以我可以发送 ignoreExpiration 作为选项,否则如果令牌过期,verfiy 会抛出错误

const verify = (token) => {
  return new Promise(function(resolve, reject) {
    jwt.verify(
      token,
      _.get(strapi.plugins, ['users-permissions', 'config', 'jwtSecret']),
      {ignoreExpiration: true},
      function(err, tokenPayload = {}) {
        if (err) {
          return reject(new Error('Invalid token.'));
        }
        resolve(tokenPayload);
      }
    );
  });
}



module.exports = {
  refreshToken: async (ctx) => {
    const {token} = ctx.request.body;
    const payload = await verify(token);
    console.log(payload)
    return  strapi.plugins['users-permissions'].services.jwt.issue({id: payload.id})
  }
}

routes.json

 {
   "method": "POST",
   "path": "/refreshToken",
   "handler": "auth.refreshToken",
   "prefix": "",
   "config": {
     "policies": []
   }
 },

前端

我已经使用 axios-auth-refresh 创建了一个拦截器,当它检测到 401 错误时触发刷新令牌请求

import createAuthRefreshInterceptor from 'axios-auth-refresh';
import axios, { AxiosInstance } from "axios";

const refreshAuthLogic = (failedRequest:any) => axios.post(`${SERVER_URL}${REFRESH_TOKEN_URL}`, {token: failedRequest.response.config.headers['Authorization'].split(" ")[1]}).then(tokenRefreshResponse => {
    localStorage.setItem('token', tokenRefreshResponse.data);
    failedRequest.response.config.headers['Authorization'] = 'Bearer ' + tokenRefreshResponse.data;
    return Promise.resolve();
});


createAuthRefreshInterceptor(axiosInstance, refreshAuthLogic);

答案 2 :(得分:0)