Flask return redirect () вызов не перенаправляет пользователя - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть сайт фляги, который я запускаю локально, используя встроенный сервер разработки фляги (локальный компьютер).

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

Пользователю обслуживается страница, как если бы он имел полное право, даже если вызов «перенаправления» все еще выполняется.Скорее всего, я неправильно использую функцию перенаправления - пожалуйста, просветите меня.

Вот настройка сайта колбы:

from flask import Flask, render_template, request, url_for, redirect, Markup, session, abort

def security(page_name):
    # Direct not logged in users to the login form
    if not session.get('logged_in'):
        return render_template('login.html')
    else:
        try:
            # Update user's permissions
            permissions_list = login_helpers.get_user_permissions_by_id(user_id)
            session['permissions'] = permissions_list

            if requested_page_abbreviation not in session['permissions']:
                # User does not have access -- bounce user back to home

                # I see this appear in the console
                print('Not authorized')

                # This must get executed, but the user does not get directed back home -- instead the resulting page loads as if the user has permissions
                return redirect('/home')

                # This does not execute
                # If I replace this line above the "return redirect('/home')" call, the expected "Unauthorized" page results and the 401 HTTP code is returned
                abort(401)


        except KeyError:

            # User has not yet had permissions set -- bounce user back to home to login
            return redirect(url_for('home'))

@app.route('/', methods=['GET','POST'])
def home():
    return render_template('home.html')

@app.route('/test_page', methods=['POST'])
def test_page():

    security_check('TEST')

    return render_template('test_page.html')

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Привет, я думаю, вы должны рассмотреть возможность использования -> ловушек запроса

0 голосов
/ 22 февраля 2019

У меня есть похожая программа, но я не перенаправляю из вспомогательного метода проверки безопасности.

Что я делаю: у меня есть метод, который проверяет безопасность и возвращает истину / ложь на основе учетных данных.После получения результата проверки безопасности я перенаправляю из своего метода определения маршрута.Нет перенаправления из вспомогательного метода.

Пример моего кода следующий, и он работает для меня:

@app.route("/", methods=['GET', 'POST'])
def mymethod():
    secure = sec()
    if(secure):
        return "Secure page"
    else:
        return redirect('/login')

@app.route("/login", methods=['GET', 'POST'])
def login():
    return "login page"

# Do not redirect from your helper method
def sec():
    secured = False
    # Your security logic and code
    if secured:
        return True
    else:
        return False

Вы можете заметить, что моя программа проверки безопасности просто проверяет правильность и говорит мне, что делать,Вы можете удалить GET или POST из маршрута в зависимости от ваших требований к маршрутам, я просто поместил их там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...