#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».
теперь он работает должным образом с этим