【问题标题】:Flask JWT : get_jwt_identity() without @jwt_required always return NonFlask JWT:没有 @jwt_required 的 get_jwt_identity() 总是返回 Non
【发布时间】:2021-07-18 23:44:42
【问题描述】:

我正在构建一个 Flask JWT 扩展应用程序,这就是我想要做的:

我有和端点对所有人开放(即没有装饰器@jwt_required,每个人都可以访问链接)

但如果有人通过身份验证访问此链接,我希望能够取回他的身份,类似这样:

@bp.route('/test', methods=('GET', 'POST'))
def test() -> str:
    identity = get_jwt_identity()
    print(a)
    if identity is not None:
        # do something
    else:
        # do other stuff

问题是没有装饰器,get_jwt_identity 总是返回 None

有没有办法做到这一点?

谢谢

【问题讨论】:

    标签: python access-token flask-jwt-extended


    【解决方案1】:

    如果您使用的是 4.x.x 版本,请使用 @jwt_required(optional=True)。如果您仍在使用 3.x.x 版本,请使用 @jwt_optional

    【讨论】:

    • 您好,我有一个问题回来,我使用@jwt_optional,目前工作得很好,但是阅读烧瓶代码我发现:“如果请求中存在无效的访问令牌(过期,篡改等),这仍然会引发适当的异常。”有可能避免这个例外吗?即使有任何过期的令牌,我也希望可以访问我的功能的“其他”部分,是否可以这样做?目前我正在考虑覆盖烧瓶功能,但不确定这是一件好事
    • 您可以使用verify_jwt_in_request(optional=True) 并捕获引发的异常。在大多数情况下,这不是所需的行为,因此没有内置方法来抑制 flask-jwt-extended 上的这些异常。
    【解决方案2】:

    如果您想在未受保护的端点上解码自定义访问令牌。你需要使用来自flask-jwt-extendeddecode_token

     from flask_jwt_extended import decode_token
    
     def post(self):
            data = ResetPassword.parser.parse_args()
            reset_token = data['reset_token']
            decoded_token = decode_token(reset_token)['sub'] 
    

    sub 指的是在您创建令牌时的身份

        access_token = create_access_token(identity=user.get_id())
    

    【讨论】:

      猜你喜欢
      • 2019-07-19
      • 2021-03-05
      • 2020-08-28
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-06-27
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多