Flask Переопределение аутентификации для одного маршрута - PullRequest
0 голосов
/ 08 января 2020

Я новичок в python и работаю над небольшим кодом для flask веб-сервера. Мне нужно решение для достижения следующего сценария.

У меня есть app.py, который вызывает settings.py для flask идентификатора пользователя и пароля, а также route.py для обработки маршрутов. Теперь я хочу, чтобы у пользователей запрашивалась аутентификация только для нескольких маршрутов, а другие маршруты должны переопределять аутентификацию и выполнять операции на основе указанного c users / speci c хоста. Можно ли этого достичь?

На данный момент запрашивается аутентификация для всех маршрутов

Ответы [ 2 ]

0 голосов
/ 11 марта 2020

Хотя приведенный выше ответ решает мой запрос, я искал более конкретный c сценарий. Вот что я изменил,

Я прокомментировал # app.config ['BASIC_AUTH_FORCE'] = Истина в flask настройках

Вот что изменилось в rout.py Добавлен basic_auth = BasicAuth (приложение) и я добавил этот декоратор @ basic_auth.required для маршрутов, требующих аутентификации.

В качестве меры безопасности я разрешаю неаутентифицированные запросы только от указанного c хоста с использованием заголовков.

0 голосов
/ 08 января 2020

Вы можете написать декоратор. Декораторы обычно вызываются перед определением функции, которую вы хотите использовать (в этом случае всякий раз, когда вы хотите аутентифицировать свой маршрут).

Например:

def requires_auth():
    def wrapper(f):
        @wraps(f)
        def decorated(*args, **kwargs):
            if 'id' not in flask.session:
                return unauthorized_abort()
            else:
                if flask.session['first_login']:
                    return f(*args, **kwargs)
                else:
                    return flask.render_template('change_password.html')
        return decorated
    return wrapper

После написания этого декоратора мы можем легко использовать аутентификацию только для определенных маршрутов. Этот код ниже показывает @ require_auth () , который легко поможет только для определенных маршрутов.

@app.route('/data/get_data',methods=['GET'])
@requires_auth()
def get_data():
...