Я пытаюсь адаптировать другой ответ StackOverflow об условном применении декоратора, требующего только входа в систему для определенной среды (в конечном итоге staging
, но development
, пока я не получу эту работу).С этой целью я начал со следующего
auth = HTTPDigestAuth()
def login_required(dec, condition):
def decorator(func):
if not condition:
return func
return dec(func)
return decorator
@bp.route('/auth')
@login_required(auth.login_required, current_app.config['ENV'] != 'development')
def auth_route():
return current_app.config['ENV']
Когда я запускаю сервер, я получаю ошибку RuntimeError: Working outside of application context
.Попробовав несколько предложений из более ранней версии этого вопроса, я заставил RuntimeError
исчезнуть, но декоратор все еще не применяется правильно, когда я хочу.Вот текущая версия:
def login_required(dec):
def decorator(func):
if not os.environ.get('ENV') != 'development':
return func
return dec(func)
return decorator
@bp.route('/auth')
@login_required(auth.login_required)
def auth_route():
return current_app.config['ENV']
Это никогда не возвращает функцию auth.login_reqired
.Он всегда пропускает браузер без аутентификации.
Итак, я попытался изменить условие на
if not os.environ.get('ENV') is not None:
, и затем показывается аутентификация.
Да, у меня естьсделал export ENV=development
в оболочке и подтвердил это командой env
.Но даже тогда он не читает переменную окружения, как я ожидал.
Возможно, это просто неправильный путь?Моя конечная цель - потребовать аутентификацию в одной конкретной среде.Это возможно с пути, по которому я иду?Возможно ли это вообще?