Flask-JWT-Ext get_current_user(), get_jwt_identity() возвращает None, несмотря на наличие токенов

Спасибо, что посмотрели. Я пытаюсь реализовать 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 и т. Д. Работает.

Спасибо


person anongal    schedule 23.11.2020    source источник


Ответы (1)


Ваш порядок декоратора перевернут. Поставьте app.route перед jwt_required

person vimalloc    schedule 23.11.2020
comment
У меня раньше так было. Где-то читал, что его нужно перепрошивать. В любом случае была такая же проблема с перевернутым декоратором. - person anongal; 23.11.2020