У меня есть сайт фляги, который я запускаю локально, используя встроенный сервер разработки фляги (локальный компьютер).
Перед обслуживанием страницы я запускаю пользовательскую функцию оценки безопасности, чтобы гарантировать, что пользователь имеет право доступа к странице.Если пользователь не имеет права доступа к странице, я пытаюсь перенаправить пользователя обратно на домашнюю страницу.Все в этом рабочем процессе происходит как задумано, кроме перенаправления.
Пользователю обслуживается страница, как если бы он имел полное право, даже если вызов «перенаправления» все еще выполняется.Скорее всего, я неправильно использую функцию перенаправления - пожалуйста, просветите меня.
Вот настройка сайта колбы:
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')