尝试验证用户的令牌。
我如何在客户端提出请求(js +反应):
axios({
method: 'POST',
url: '/verify',
headers: { authorization: sessionStorage.getItem('token') },
data: {}
})
.then(function(response) {
// ...
});
我如何在服务器端(python)接收请求:
@app.route('/verify', methods=['POST'])
def verify_user():
token = request.headers.get('Authorization')
payload = jwt.decode(token, SECRET_KEY) // error here
// ...
为什么会出现此错误? :
Traceback (most recent call last):
........
jwt.exceptions.DecodeError: Signature verification failed
提前谢谢。
P.S。令牌正确发送
修改
发现了错误的警告:
@app.route('/login', methods=['POST'])
def get_user():
// ...
token = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')
return token // when I return the token here, it becomes slightly reduced
真实令牌:
b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.Joh1R2dYzkRvDkqv3sygm5YyK8Gi4ShZqbhK2gxcs2U'
我返回的缩减令牌:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.Joh1R2dYzkRvDkqv3sygm5YyK8Gi4ShZqbhK2gxcs2U
如何将生成的jwt令牌发送到客户端来修复它?
答案 0 :(得分:0)
这看起来像是字符串vs字节编码问题。要解码字节字符串:
str = byte_string.decode('UTF-8') # turns b'123' into '123'
将字符串编码为字节:
byte_string = str.encode('UTF-8') # turns '123' into b'123'
您可能需要encode
将传入的字符串转换为字节,然后再将其传递给jwt.decode()
,如下所示:
jwt.decode(token.encode('UTF-8'), SECRET_KEY)
除了UTF-8之外还有其他编码,但这可能就是你所需要的。