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
经过几个小时的挣扎,我终于找到了问题所在.希望它能帮助那些解决同样问题的人.
只需要Authorization
在Access-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