【问题标题】:Flask-JWT-Ext get_current_user(), get_jwt_identity() returns None despite having tokensFlask-JWT-Ext get_current_user(), get_jwt_identity() 返回 None 尽管有令牌
【发布时间】:2021-03-05 20:30:28
【问题描述】:

感谢您的观看。我正在尝试实现 Flask-JWT-Ext。为了撤销我的令牌,我实施了 redis 黑名单。

我正在尝试使用 get_current_user()、get_jwt_identity() 等,但它返回 None,尽管使用 @jwt_required 装饰器传递了访问令牌...

这是我的登录信息(正确生成访问和刷新令牌):

@app.route('/login', methods=['POST'])
def check_login_info():
    '''
    Login user
    '''
    arw = ApiResponseWrapper()
    login_data = request.get_json()
    
    try:
        matching_login = Login.query.filter_by(username=login_data['username']).one()
        matching_login.check_password(login_data['password_hash'])

        access_token = create_access_token(identity=matching_login.username)
        access_jti = get_jti(encoded_token=access_token)
        revoked_store.set(access_jti, 'false', timedelta(minutes=15) * 1.2)

        refresh_token = create_refresh_token(identity=matching_login.username)
        refresh_jti = get_jti(encoded_token=refresh_token)
        revoked_store.set(refresh_jti, 'false',  timedelta(days=30) * 1.2)

        tokens = {
            'access_token': access_token,
            'refresh_token': refresh_token
        }

    except (MultipleResultsFound, NoResultFound):
        arw.add_errors('No result found or multiple results found')

    except ValueError:
        arw.add_errors('Value error')

    except BadRequestsError:
        arw.add_errors('Bad requests error')

    if arw.has_errors():
        return arw.to_json(None, 400)

    return jsonify(tokens), 201

我无法在不同的路线上使用 get_current_user() 等,所以我制作了一个示例来测试它。尽管在标头中传递了正确的令牌,但它为当前用户和身份返回 None。

@jwt_required
@app.route('/check', methods=['GET'])
def check_login():
    current_user = get_current_user()
    user_has_tokens = get_jwt_identity()
    return jsonify({"user": current_user, "tokens": user_has_tokens}), 201

你知道我错过了什么吗?我肯定正确设置了 redis 黑名单并使用 create_access_token 生成令牌等工作。

谢谢

【问题讨论】:

    标签: flask jwt jwt-auth flask-jwt-extended flask-jwt


    【解决方案1】:

    您的装饰器顺序倒退了。将app.route 放在jwt_required 之前

    【讨论】:

    • 我以前也是这样。在需要翻转的地方阅读。无论如何,翻转装饰器时遇到了同样的问题。
    猜你喜欢
    • 2019-07-19
    • 2021-07-18
    • 2018-08-08
    • 2018-11-18
    • 2019-10-19
    • 2023-04-02
    • 2021-01-22
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多