应用jwt auth包装器时,flask-cors包装器不起作用。

发布于 2021-01-29 16:23:37

我正在尝试使用Flask构建一个api网站,并Flask-jwt用来提供令牌授权。
如果我在Apache中执行CORS(使用mod_headers来添加Allow-Access标头),则授权工作正常

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标头响应。(但是,如果我手动发布(例如进行卷曲),我仍然可以看到跨源插件工作和访问控制标头)

当我删除@jwt_required包装器时,cross_origin包装器功能正常,它将给我响应。当应用jwt_required包装器时,从服务器看不到任何响应。

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

我试图更改包装器的顺序,但无济于事。

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

两个包装器的源代码:
flask-jwt:
https ****: //github.com/mattupstate/flask-
jwt/blob/master/flask_jwt/ init
.py

flask-cors:https :
//github.com/wcdolphin/flask -cors / blob / master /
flask_cors.py

关注者
0
被浏览
145
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    经过几个小时的努力,我终于找到了问题所在。希望它可以帮助遇到同样问题的其他人。当需要身份验证时,
    只需要Authorization在“ headers”参数(用于设置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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看