Я пытаюсь создать декоратор, который будет перенаправлять на указанный путь, если не вошел в систему.
Декоратор:
def secured(path):
@wraps(path)
def wrapper(f, *args, **kwargs):
if 'loggedin' in session:
if session.get('loggedin'):
return f(*args, **kwargs)
else:
redirect(path)
else:
session['loggedin'] = False
redirect(path)
return wrapper
Функция входа в систему:
def val_cred(username, password):
return username == 'login' and password == 'password'
@app.route('/login', methods=['POST'])
def login():
auth = request.authorization
if not auth.username or not auth.password or not val_cred(auth.username, auth.password):
return 'bad credentials', 401
session['loggedin'] = True
return redirect("/hello")
Пример безопасного пути:
@app.route('/hello')
@secured('/')
def hello():
return 'you are logged in'
До того, как я создал декоратор со статическим путем, который не принимает аргументов и он работал хорошо, я подумал, что это проблема синтаксиса, но Flask заявляет, что это что-то другое
Traceback (most recent call last):
File "C:/daftcode-flask/app.py", line 31, in <module>
@secured('/')
File "C:/daftcode-flask/app.py", line 14, in wrapper
if 'loggedin' in session:
...
RuntimeError: Working outside of request context.
This typically means that you attempted to use functionality that needed
an active HTTP request. Consult the documentation on testing for
information about how to avoid this problem.
Как я могу заставить его работать должным образом?