问题标签 [flask-jwt-extended]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flask-jwt-extended - 使用flask-jwt-extended时出现NoAuthorization Header Missing Exception
当我尝试此示例时,如果标头未提供 jet 令牌,则会出现错误:
例子:
但是在我的办公室里,我有类似的设置,只是我没有打电话
我得到NoAuthorization
异常被提出。这是如何运作的 ...
flask - 从 swagger 传递的授权标头未正确解析丢失的 Bearer
我在flask init .py中定义了一个蓝图
然后我使用命名空间:
因此,当我单击 swagger 文档上的 Try Out 按钮时,它会生成具有授权标头的 CURL URI
但不是
这导致错误说:
authentication - flask-jwt-extended current_user identity = 从刷新令牌创建非新鲜访问令牌时无
在我的烧瓶应用程序(python 2.7)中,我试图触发访问令牌以通过刷新令牌在@jwt.expired_token_loader 装饰器到期时进行刷新。访问令牌和刷新令牌都存储在 cookie 中 (JWT_TOKEN_LOCATION = 'cookies')。我正在使用文档中提供的相同代码(https://flask-jwt-extended.readthedocs.io/en/latest/tokens_in_cookies.html) 这样做,我就能够成功地生成一个新的访问令牌。但是,在生成新的访问令牌时,访问令牌的身份声明等于无 (get_raw_jwt())。每当我打印 jwt_claims 或尝试使用 current_user = get_jwt_identity() 获取当前用户时,无论我对刷新令牌或访问令牌做什么,它都会将身份返回为无。知道哪个用户正在向神经网络提交查询对我来说很重要,这样我就可以正确跟踪哪些用户提交了哪些查询(一对多关系)。
我已尝试对 refresh_token 进行故障排除(解码),但遇到了一个单独的问题:当我尝试使用 decode_token() 对 refresh_token 进行解码时,我得到一个以 InvalidSignatureError: Signature verification failed 结尾的长回溯。我拿了 refresh_token 并通过https://jwt.io运行它,它解码了令牌。我可以在解码的令牌中看到“身份”声明正在向我提供用户的身份,但它告诉我该令牌未经过验证。但是,一旦我检查了屏幕上的秘密 base64 编码框,签名就会被验证,并且 jwt 的签名部分也会随之改变。我尝试解码https://jwt.io的这个修改过的 jwt为我提供了 decode_token 函数,但它仍然为我提供了相同的错误:InvalidSignatureError:签名验证失败。
我花了几个小时阅读谷歌为我提供的关于烧瓶喷射扩展和 PyJWT 的所有内容,但我不知道如何修复它。我尝试将我的 JWT_SECRET_KEY 配置修改为不同的字符串,甚至使用 base64 对其进行编码,但这些都不能解决问题。我已经打开和关闭了 JWT_COOKIE_CSRF_PROTECT 配置。我已经打开和关闭了 JWT_ACCESS_COOKIE_PATH 和 JWT_REFRESH_COOKIE_PATH。我尝试解码 refresh_token_cookie 和 CSRF_refresh_token cookie。我尝试使用 refresh_token_cookie 和 CSRF_refresh_token cookie 运行 decode_token(),同时提供 csrf_value=request.cookies.get('csrftoken') 参数。我尝试过直接使用 jwt 的 decode() 函数(from jwt import decode)。
我只是不知道还能做什么,也找不到任何其他在线资源。任何帮助深表感谢!!
我的下一步是将我的身份验证系统移动到 flask-jet-simple 或 PyJWT。我真的很想使用 JWT 来验证我的用户。我不知道如何将 JWT 与烧瓶登录结合起来,或者这是否可能。我无法在网上找到任何有人通过 JWT 使用烧瓶登录的资源。我确实找到了一个名为 flask-jwt-login 的相当新的 repo,如果我无法弄清楚,我可能会尝试使用它。最终我想继续使用flask-jwt-extended。我需要关注这个网络应用程序的其他部分,并希望让他的部分得到解决。
无论如何,这是我的代码,工作流程从 /login 页面开始。这会将您重定向到 /NN 页面。一旦访问令牌过期,如果您尝试重新加载 /NN 页面,它将重新路由到 /token/refresh 页面。刷新令牌后,它将返回到 /NN 页面。
如果我需要上传任何其他文件,请告诉我。
PS这是我关于堆栈溢出的第一篇文章,所以请原谅我的任何格式问题。
应用程序.py
配置文件
这是刷新令牌刷新访问令牌后 get_raw_jwt() 返回的内容。
如您所见,身份声明等于无。
这是我看到的回溯:
python - gunicorn 和 flask-jwt-extended 没有获得当前用户
我一直在构建一个使用烧瓶的应用程序,以及需要访问令牌才能访问的受保护函数周围flask_jwt_extended
的装饰器。@jwt_required
从这些端点,我可以使用flask_jwt_extended
'sget_current_user
函数来获取当前用户。
这在开发过程中一直运行良好,但现在我计划使用gunicorn
. 但是,当我运行gunicorn
服务器时,该函数似乎get_current_user
总是不返回任何内容。例如,以下代码适用于python3 -m flask run
,但不适用于gunicorn run:app -b localhost:5000
。这里可能是什么问题?
flask - 如何在flask-jwt-extended中的redis中存储jwt令牌?
我想知道flask-jwt-extended如何与自动缩放环境一起工作,有没有办法将令牌存储在集中式服务器(redis)中并访问所有自动缩放实例。
python - 在服务之间传播 JWT 令牌
我希望使用库 flask-jwt-extended 在我在 docker 中运行的服务之间传播 JWT 令牌,并且我知道如何使用类似于此的东西来做到这一点:
但根据我的经验,我需要回复才能做到这一点。
我已经有前端创建令牌并保护我的路线。我只想使用该令牌为后端做同样的事情。
我希望能够从我的前端应用程序登录,并在我登录时将令牌传播到其他服务中。我该如何处理?
我会将 post 请求发送到一个类似于以下内容的函数:
我需要返回该响应吗?
python - 我应该如何处理@jwt_required 装饰器中引发的异常?(在烧瓶-jwt-扩展中)
我有一个带有@jwt_required 装饰器的功能。
当设置正确的 HTTP 标头时,它工作正常,即
Authentication: Bearer [TOKEN]
但是当令牌无效/错误或混乱时,会引发 jwt.exceptions.DecodeError :
我不能一直依赖客户总是使用正确的令牌。而且我无法捕捉到异常,因为它是在装饰器中引发的,而不是我自己的函数。所以结果是 http 500 错误。我应该如何更优雅地处理异常?
python - get_jwt_identity() 在 Flask-JWT-Extended 中返回 None
我正在使用 Flask-JWT-Extended 来保护我的 Flask API。登录后,在受保护的路由(添加用户)中,我调用 get_jwt_identity(),但它返回 None,所以我无法获取身份。
用户.py
python - 如何将刷新令牌发布到 Flask JWT Extended?
我正在尝试从此处的代码中刷新 JWT 令牌。问题在于如何通过刷新获取新令牌。
这有效:
这行得通,我得到我的令牌并将其放入 ACCESS
这有效,我得到了我的用户名
但是,当令牌过期时,如何使用刷新令牌和/或访问令牌获取 curl 以获取新的访问令牌?我尝试了许多 POST,但似乎没有任何效果:
https://flask-jwt-extended.readthedocs.io/en/latest/refresh_tokens.html
flask-jwt - flask-jwt 和 flask-jwt-extended 之间有区别吗?
一周前我刚刚了解了烧瓶和 JWT,所以我真的可以使用一些帮助。有人可以解释 flask-jwt 和 flask-jwt-extended 之间的区别吗?