Подтвердить что ты не робот

Колба перед запросом - добавление исключения для определенного маршрута

в моей функции before_request(), я хочу перенаправить пользователя в /login, если они еще не вошли в систему. Есть ли специальная переменная, которая даст мне текущий URL-адрес, который будет работать в соответствии с приведенным ниже примером?

@app.before_request
def before_request():
    # the variable current_url does not exist
    # but i want something that works like it
    if (not 'logged_in' in session) and (current_url != '/login'):
        return redirect(url_for('login'))

Мне нужно проверить, что текущий url - '/login', потому что, если я не сервер, он переходит в бесконечный цикл.

спасибо!

4b9b3361

Ответ 1

Существует несколько свойств объекта запроса, который вы можете проверить, документально подтвержденного здесь, request.path, вероятно, того, чего вы хотите. Могу ли я предложить request.endpoint, поэтому вы будете защищены, если вы решите направить свое представление на другой URL-адрес или несколько URL-адресов

@app.before_request
def before_request():
    if 'logged_in' not in session and request.endpoint != 'login':
        return redirect(url_for('login'))

Ответ 2

Вы можете использовать декоратор. Вот пример того, как проверять ключ api перед специальными запросами

from functools import wraps

def require_api_key(api_method):
    @wraps(api_method)

    def check_api_key(*args, **kwargs):
        apikey = request.headers.get('ApiKey')
        if apikey and apikey == SECRET_KEY:
            return api_method(*args, **kwargs)
        else:
            abort(401)

    return check_api_key

И вы можете использовать его с помощью:

@require_api_key

Ответ 3

Здесь реализация принятого ответа с flask-login:

@app.before_request
def require_authorization():
    from flask import request
    from flask.ext.login import current_user

    if not (current_user.is_authenticated or request.endpoint == 'login'):
        return login_manager.unauthorized()