Strapi JWT 令牌寿命?

Strapi JWT token lifetime?

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

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

在获得关于令牌生命周期结束的例外之前,我如何进行令牌验证?端点名称是什么 link?

我非常有信心默认持续时间是 30 天,并且不能使用刷新令牌重新发布。

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

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

暂时解决,刷新token需要鉴权。 我现在的解决方案是在旧的到期后使用 Axios Interceptor.

创建一个新的

后端

我已经覆盖了验证方法,所以我可以发送 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);

这里可以看到默认值https://github.com/strapi/strapi/blob/86e0cf0f55d58e714a67cf4daee2e59e39974dd9/packages/strapi-admin/services/token.js

是的,那是 30 天