1

我已经使用flask-restplus和flask_jwt_extended编写了用于登录和注销的REST API,我实现了无缝工作的jwt access_token生成,但现在我需要将令牌存储到cookie中。

我的代码是这样的:

api/用户/resource.py

from app.auth_helper import Auth
from flask_restplus import Resource
from flask import request

@user_api_ns.route("/login")
class LoginUser(Resource):
    post_data = request.json
    return Auth.login_user(data=post_data)

auth_helper.py

import datetime
from flask_jwt_extended import create_access_token
from flask import jsonify

def encode_auth_token(user):
    access_token = create_access_token(identity=user, fresh=True, expires_delta=datetime.timedelta(days=1, seconds=5))

class Auth(object):
    @staticmethod
    def login_user(data):
        try:
            auth_token = encode_auth_token(data.get("username"))
            if auth_token:
               response_object = jsonify({'status': 'success', 'Authorization': auth_token.decode()})
               set_access_token(response_object, auth_token)
               return response_object, 200
        except Exception as er:
            print er
            return {"status": "fail"}, 401

但是上面的代码给了我错误:

TypeError: <Response 367 bytes [200 OK]> is not JSON serializable

如果我不使用 jsonify(..) 我会收到错误dict object does not have set_cookie attribute,这很明显,因为set_access_cookie期望响应对象不是普通的 dict

4

1 回答 1

1

应该是这样的

response_object = jsonify({'status': 'success', 'Authorization': auth_token.decode()})
set_access_cookies(response_object, auth_token)
return response_object

因为jsonify已经返回响应对象。

于 2018-10-26T05:13:13.063 回答