簡體   English   中英

Flask_restx @api.route return 語句導致 TypeError

[英]Flask_restx @api.route return statement results in a TypeError

我有一個我無法解決的問題。 我想在 flask 中使用 http cookies。 這是文檔中的代碼:

@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

任何想法我該如何克服這個問題?

能夠像這樣解決它:

data = dict(login=True)
resp = make_response(jsonify(**data), 200)
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM