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

时间:2014-07-18 14:49:18

标签: python authentication flask cross-domain

我正在尝试使用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

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

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

我正在使用chrome调试我的客户端页面。顺便说一句

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

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

两个包装器的源代码:
烧瓶-JWT:
https://github.com/mattupstate/flask-jwt/blob/master/flask_jwt/init.py
烧瓶-CORS:
https://github.com/wcdolphin/flask-cors/blob/master/flask_cors.py

1 个答案:

答案 0 :(得分:5)

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