Flask не перенаправляется автоматически на страницу входа

#flask #redirect #flask-login

#flask #перенаправление #flask-вход

Вопрос:

Когда сеанс истекает и пользователь пытается получить доступ к неавторизованной странице, появляется следующее сообщение (которое является правильным):

 Redirecting...

You should be redirected automatically to target URL: /auth/sign_in. If not click the link.
  

Проблема в том, что на самом деле это не перенаправление, мне приходится каждый раз нажимать на ссылку auth / sign_in — flask не перенаправляет меня автоматически, просто отображает страницу. Я тестировал в Chrome и Firefox, та же проблема. Я пару раз искал stack overflow, но смог найти только совет по исправлению перенаправления flask, а не по этой конкретной проблеме.

Вот мой login_manager.unauthorized_handler.

 @login_manager.unauthorized_handler
def unauthorized():
    flash("Please sign in to access", 'red')
    return redirect(url_for("auth.sign_in")), 401
  

Пожалуйста, дайте мне знать, есть ли что-нибудь еще, что было бы полезно показать, чтобы ответить на вопрос.

Ответ №1:

Браузеры используют ошибку 301 (перемещено постоянно) для перенаправления на другие страницы. Вот почему Flask автоматически возвращает 301 при перенаправлении. Поэтому, если вы вернете ошибку 401 (несанкционированную), ваш браузер не сможет перенаправить. Либо верните 301, либо просто оставьте его пустым.

 return redirect(url_for("auth.sign_in")), 301
  

или

 return redirect(url_for("auth.sign_in"))
  

должно сработать.