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

标签 python authentication flask cross-domain

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

相关文章:

python - 在 Flask 应用程序中放置调试标志的位置

python - 找不到 libNVVM

python - 如何使用 FreeTDS ODBC 连接到 SQL Server

authentication - SSH访问,不提及远程服务器的用户

使用 SSL 登录 php

python - 附加操作按钮在 flask-admin 上不起作用

python - 如何使用 pip 升级所有 Python 包?

php - 为什么从 Web 服务器执行时 Python 环境变量不同?

c# - C# 中的 Grpc 中间件或拦截器

python - Flask 在使用蓝图静态路由时为蓝图静态文件引发 404