Python Json jwt令牌问题-TypeError:类型为';用户';JSON不可序列化
我正在尝试将令牌附加到登录的用户:Python Json jwt令牌问题-TypeError:类型为';用户';JSON不可序列化,python,json,flask,jwt,access-token,Python,Json,Flask,Jwt,Access Token,我正在尝试将令牌附加到登录的用户: user_info = request.get_json() entered_username = User.query.filter_by(username = user_info['username']).first() if user_info['password'] == entered_username.password:
user_info = request.get_json()
entered_username = User.query.filter_by(username = user_info['username']).first()
if user_info['password'] == entered_username.password:
token = jwt.encode({'username':entered_username, 'exp':datetime.datetime.utcnow() + datetime.timedelta(minutes=30)},
secret_key, algorithm='HS256').decode('UTF-8')
return jsonify(token)
但是我得到:TypeError:User类型的对象不可JSON序列化。
我还尝试了返回jsonify(token.decode('UTF-8'))
我缺少什么?您不能将
用户
对象编码为JSON,并且输入的用户名
是用户
对象。如果您只想在令牌中输入用户名,可以执行以下操作:
user_info = request.get_json()
user_obj = User.query.filter_by(username = user_info['username']).first()
if user_info['password'] == user_obj.password:
claims = {
'username': user_info['username'], # or perhaps user_obj.username
'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
}
token = jwt.encode(claims, secret_key, algorithm='HS256')
# Maybe some error checking here?
response = {
'token': token.decode()
}
return jsonify(response)
您不能将
用户
对象编码为JSON,并且输入的用户名
是用户
对象。如果您只想在令牌中输入用户名,可以执行以下操作:
user_info = request.get_json()
user_obj = User.query.filter_by(username = user_info['username']).first()
if user_info['password'] == user_obj.password:
claims = {
'username': user_info['username'], # or perhaps user_obj.username
'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
}
token = jwt.encode(claims, secret_key, algorithm='HS256')
# Maybe some error checking here?
response = {
'token': token.decode()
}
return jsonify(response)
正如上面所说:您不能将
User
对象编码为JSON,而entered\u username
是User
对象。如果您只想在您的令牌中输入用户名,请将其编码为{'username':user_info['username'],…}
。您的意思是全部吗?我尝试了{'username':user_info['username'],…}.decode('UTF-8'),但后来我得到了AttributeError:'dict'对象没有属性'decode'
是的,省略号表示代码的其余部分,而不是字面上的…
。我也不知道你为什么要在这里调用decode
。不,我是说{}的其余部分或整个代码的其余部分。不哈哈。我对encode也有同样的理解。正如上面所说的:你不能将用户
对象编码为JSON,而输入的用户名
是用户
对象。如果您只想在您的令牌中输入用户名,请将其编码为{'username':user_info['username'],…}
。您的意思是全部吗?我尝试了{'username':user_info['username'],…}.decode('UTF-8'),但后来我得到了AttributeError:'dict'对象没有属性'decode'
是的,省略号表示代码的其余部分,而不是字面上的…
。我也不知道你为什么要在这里调用decode
。不,我是说{}的其余部分或整个代码的其余部分。不哈哈。我对编码也有同样的要求。