Колба JWT : @jwt.token_in_blacklist_loader никогда не вызывается

#python #flask #token #logout

Вопрос:

Я создаю приложение с использованием flask-jet-extended, и я нахожусь в части выхода из https://flask-jwt-extended.readthedocs.io/en/stable/blocklist_and_token_revoking/

Моя проблема в том, что декоратор @jwt.token_in_blacklist_loader, похоже, не работает. Я делаю это :

 @bp.route('/logout', methods=('GET', 'POST'))
@jwt_required
def logout():
    jti = get_raw_jwt()["jti"]
    insert_jti_in_blacklist(jti) # function that insert jti in my database
    return redirect(url_for('auth.login')) #redirect to login


@jwt.token_in_blacklist_loader
def check_if_token_revoked(jwt_header, jwt_payload):$
    print("check revoked token")
    jti = jwt_payload["jti"]
    return jti_in_blacklist(jti) #function return True if my jti is in blacklist
 

и моя функция для проверки черного списка :

 @bp.route('/account', methods=('GET', 'POST'))
@jwt_required
def account() -> str:
    print(jti_in_blacklist(get_raw_jwt()["jti"]))
 

что я делаю, это выхожу из своего приложения, а затем захожу в учетную
запись, функция печати в учетной записи возвращает «True», как и ожидалось (мой токен находится в черном списке)
, но я никогда не вхожу в check_if_token_revoked (у меня нет консоли «печать», проверьте отозванный токен)

Так почему же это не называется? обычно это именно цель этого декоратора, я не понимаю, почему он не работает

Спасибо

Ответ №1:

Попробуйте изменить @jwt_required на @jwt_required(), объяснение здесь.

Комментарии:

1. спасибо, это не проблема, потому что я нахожусь в старой версии, но по вашей ссылке чуть выше показано, что JWT_BLACKLIST_ENABLED был необходим в более старой версии (поэтому мой), просто активируйте его, и он работает!

Ответ №2:

Благодаря @igor я нахожу в документе, что я нахожусь в старой версии jwt-extended, где JWT_BLACKLIST_ENABLED необходимо поставить в «True».

теперь он работает должным образом с этим