AdonisJS不刷新令牌,因为令牌无效

时间:2020-03-01 02:49:22

标签: access-token refresh-token jwt-auth adonis.js

我正在尝试获取一个新的访问令牌,向服务器发送一个发布请求。我正在使用邮递员发送刷新令牌,并且处理此问题的功能在本段中。服务器响应为E_INVALID_JWT_REFRESH_TOKEN

async refresh({
    request,
    response,
    auth
  }) {
     try {
      const refresh_token = request.input('refresh_token')
      const decrypted = Encryption.decrypt(refresh_token)
      console.log(decrypted)
      const token = await auth.generateForRefreshToken(refresh_token, true)
      console.log('Token is',token)
      return response.status(200).json(token)
     } catch (error) {
       return response.status(401).json(error)
     }
  }

如您所见,我解密了令牌,没关系。还要检查数据库,就可以了。

显然,我不是唯一一个出现此错误的人,并且该问题已在GitHub中关闭

更新:

这是我的config / auth.js

jwt: {
    serializer: 'LucidMongo',
    model: 'App/Models/User',
    scheme: 'jwt',
    uid: 'email',
    password: 'password',
    options: {
      secret: Env.get('APP_KEY'),
      expiresIn: '60m',
    }
  },

2 个答案:

答案 0 :(得分:1)

+字符有问题。此字符的错误在查询字符串中很常见。

如果您记录refresh_token的结果,您可能会注意到+字符被空格替换。

解决方案

1。您可以使用库将请求转换为queryString

query-string的示例:

var query = queryString.stringify({
  refresh_token:
    "74f7c7e26621d231feb39c4a9c6a76bajOKUVX+J3LG/f4hJQzy3+hgL+p2w0VkRRw6xT/NnVxUofjh/zRVJJyuwGEfoCL+l"
});

输出(query):

refresh_token=74f7c7e26621d231feb39c4a9c6a76bajOKUVX%2BJ3LG%2Ff4hJQzy3%2BhgL%2Bp2w0VkRRw6xT%2FNnVxUofjh%2FzRVJJyuwGEfoCL%2Bl

2。您可以使用Request Body

https://en.wikipedia.org/wiki/HTTP_message_body

使用此方法,无需转换文本

最佳解决方案取决于您的需求。


有趣的链接

How to include special characters in query strings

Plus sign in query string

HTTP GET with request body

答案 1 :(得分:0)

这取决于所应用的客户端和服务器之间字符编码的共识。

例如:

客户:

encrypted = toUTF8(Encryption.encrypt(token));

服务器:

decrypted = Encryption.decrypt(fromUTF8(refresh_token))