使用flask-restx设置cookies

0 投票
1 回答
17 浏览
提问于 2025-04-14 17:11

有没有办法用 flask-restx 设置 cookies 呢?我正在和 flask-jwt-extended 一起使用,想要有一个接口可以设置 jwt-cookie。

这是我到目前为止尝试过的:

@namespace.route("/login")
class Login(Resource):
    @namespace.expect(login_model)
    def post(self):
        data = namespace.payload
        username = data.get("username")
        password = data.get("password")

        user = User.query.filter_by(username=username).first()
        if not user or not check_password_hash(user.password, password):
            return {"message": "Unauthorized"}, 401

        access_token = create_access_token(identity=user, fresh=True)

        response = jsonify()
        set_access_cookies(response, access_token)
        return response, 200

当我向 /login 发送请求时,出现了以下错误:

TypeError: Object of type Response is not JSON serializable

当我把返回值中的 response 换成 {} 时,代码就能正常工作,所以问题似乎是 flask-restx 不支持直接返回 Response 对象。

1 个回答

0

我找到了问题出在哪儿。当你直接返回一个 Response 时,不能加状态码。最终的代码看起来是这样的:

@namespace.route("/login")
class Login(Resource):
    @namespace.expect(login_model)
    def post(self):
        data = namespace.payload
        username = data.get("username")
        password = data.get("password")

        user = User.query.filter_by(username=username).first()
        if not user or not check_password_hash(user.password, password):
            return {"message": "Unauthorized"}, 401

        access_token = create_access_token(identity=user, fresh=True)

        response = jsonify()
        set_access_cookies(response, access_token)
        return response

撰写回答