【发布时间】:2020-07-16 08:38:13
【问题描述】:
我有一个我无法解决的问题。我想在烧瓶中使用 http cookie。这是文档中的代码:
@app.route('/token/auth', methods=['POST'])
def login():
username = request.json.get('username', None)
password = request.json.get('password', None)
if username != 'test' or password != 'test':
return jsonify({'login': False}), 401
# Create the tokens we will be sending back to the user
access_token = create_access_token(identity=username)
refresh_token = create_refresh_token(identity=username)
# Set the JWT cookies in the response
resp = jsonify({'login': True})
set_access_cookies(resp, access_token)
set_refresh_cookies(resp, refresh_token)
return resp, 200
我使用 flask_restx 自动将响应转换为 JSON,因此不需要第一个示例中的 jsonify。但是,仍然需要对其进行 jsonify,因为我不能在字典上使用set_access_cookie。这最终会导致像这样的嵌套响应 jsonify(jsonify(x))
@api.route("/login")
class UserLogin(Resource):
def post(self):
"""Allows a new user to login with his email and password"""
email = request.get_json()["email"]
password = request.get_json()["password"]
user = User.query.filter_by(email=email).one_or_none()
if user is None:
return {"message": "user does not exist"}, 404
user = user.format()
if bcrypt.check_password_hash(pw_hash=user["password"], password=password):
if user["active"]:
resp = jsonify({"login": True})
access_token = create_access_token(identity=user)
refresh_token = create_refresh_token(user)
set_access_cookies(resp, access_token)
set_refresh_cookies(resp, refresh_token)
return resp, 200
# return (
# {"access_token": access_token, "refresh_token": refresh_token},
# 200,
# )
else:
return {"message": "User not activated"}, 400
else:
return {"message": "Wrong credentials"}, 401
这是错误:TypeError: Object of type Response is not JSON serializable
有什么办法可以克服这个问题吗?
【问题讨论】:
-
你能显示
user.format()的结果吗? -
已解决,但非常感谢您的关注 :-)
标签: flask flask-restplus jsonify