我正在尝试使用 Flask 构建一个 api 站点,并且我正在使用 Flask-jwt
来提供 token 授权。
如果我在 Apache 中执行 CORS(使用 mod_headers 添加允许访问 header ,像这样
header 设置 Access-Control-Allow-Origin "*"
但是,我想有更详细的访问控制,而不是仅仅使用通配符。我查看了 flask-cors
,这是一个很好的包装器,用于检查来源和发送 header 。
现在我的路线看起来像这样(并且在 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 header 响应。 (但是,如果我手动发布,比如做 curl,我仍然可以看到跨源插件工作和访问控制 header )
当我删除 @jwt_required
包装器时,cross_origin 包装器功能正常,它会给我响应。
当应用 jwt_required 包装器时,无法从服务器看到任何响应。
我正在使用 Chrome 调试我的客户端页面。顺便说一句
我试图改变包装器的顺序,但没有帮助。
是否有可能,如果身份验证失败,cross_origin 包装器将不会发送访问控制 header ?
两个包装器的源代码:
flask-jwt:
https://github.com/mattupstate/flask-jwt/blob/master/flask_jwt/init.py
flask 科尔:
https://github.com/wcdolphin/flask-cors/blob/master/flask_cors.py
最佳答案
折腾了好几个小时,终于找到了问题所在。希望它能帮助其他遇到同样问题的人。
需要身份验证时,只需在“headers”参数(设置 Access-Control-Allow-Headers
字段)中包含 Authorization
。
像这样
@app.route('/protected/place')
@cross_origin(headers=['Content-Type','Authorization']) # Send Access-Control-Allow-Headers
@jwt_required()
def my_view_func():
do something
关于python - 当应用 jwt auth 包装器时,Flask-cors 包装器不起作用。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24827857/