我正在尝试获取一个新的访问令牌,向服务器发送一个发布请求。我正在使用邮递员发送刷新令牌,并且处理此问题的功能在本段中。服务器响应为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',
}
},
答案 0 :(得分:1)
+
字符有问题。此字符的错误在查询字符串中很常见。如果您记录refresh_token
的结果,您可能会注意到+
字符被空格替换。
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
Request Body
https://en.wikipedia.org/wiki/HTTP_message_body
使用此方法,无需转换文本
最佳解决方案取决于您的需求。
答案 1 :(得分:0)
这取决于所应用的客户端和服务器之间字符编码的共识。
例如:
客户:
encrypted = toUTF8(Encryption.encrypt(token));
服务器:
decrypted = Encryption.decrypt(fromUTF8(refresh_token))