当应用jwt auth包装时,Flask-cors包装器不工作.

Yan*_* Hu 5 python authentication cross-domain flask

我正在尝试使用Flask构建一个api站点,我正在使用它Flask-jwt来提供令牌授权.
如果我在Apache中执行CORS(使用mod_headers添加Allow-Access头,就像这样),authorizaiton工作正常

Header set Access-Control-Allow-Origin "*"

但是,我希望有更详细的访问控制,而不是只使用通配符.我看着flask-cors,这是一个很好的包装,检查原点并发送标题.现在我的路由看起来像这样(并且在apache设置中没有标头操作)

@app.route('/protected/place')
@cross_origin(headers=['Content-Type']) # Send Access-Control-Allow-Headers
@jwt_required()
def my_view_func():
    do something
Run Code Online (Sandbox Code Playgroud)

但是现在如果我从javascript发出http请求,我将无法从服务器获得Access-Control标头响应.(但是,如果我手动发布,比如做curl,我仍然可以看到交叉源插件工作和Access控件头)

当我删除@jwt_required包装器时,cross_origin包装器运行正常,它会给我响应.当应用jwt_required包装器时,无法从服务器看到响应.

我正在使用chrome调试我的客户端页面.BTW

我试图改变包装器的顺序,但它没有帮助.

是否可能,如果身份验证失败,cross_origin包装器将不会发送访问控制标头?

两个包装的源代码:
烧瓶-JWT:
https://github.com/mattupstate/flask-jwt/blob/master/flask_jwt/ 初始化的.py
烧瓶-CORS:
https://github.com/wcdolphin/flask -cors /斑点/主/ flask_cors.py

Yan*_* Hu 5

经过几个小时的挣扎,我终于找到了问题所在.希望它能帮助那些解决同样问题的人.
只需要AuthorizationAccess-Control-Allow-Headers需要身份验证时包含在"headers"参数(设置字段)中.
像这样
@app.route('/protected/place') @cross_origin(headers=['Content-Type','Authorization']) # Send Access-Control-Allow-Headers @jwt_required() def my_view_func(): do something