Переопределение шаблонов Flask -User / Flask -Login по умолчанию - PullRequest
6 голосов
/ 07 мая 2020

Я нашел похожий вопрос здесь , но ответ, похоже, не работает для меня.

Я использую Flask User (который расширяет Flask Login, я полагаю ) и по большей части работает очень хорошо. Я создал свои собственные совершенно бесплатные sh шаблоны для входа и регистрации, вместо того, чтобы использовать их предоставленные. Следуя документации , я разместил эти шаблоны в templates/flask_user/login.html, templates/flask_user/register.html и т. Д.

Я также установил USER_UNAUTHENTICATED_ENDPOINT = "login" и USER_UNAUTHORIZED_ENDPOINT = "login" в моем файле конфигурации, где login - это имя моего маршрута входа.

Проблема в том, что если я выхожу из системы и пытаюсь получить прямой доступ к странице, требующей входа пользователя в систему, меня отправят на http://localhost:5000/user/sign-in и отображается страница входа Flask-Login. В этом есть две ошибки: 1) это неправильный маршрут для входа и 2) это неправильный шаблон для входа.

Я буду благодарен за любую помощь, которую кто-нибудь может предложить для этого , пожалуйста.

EDIT:

Код из __init__.py, который инициализирует приложение и LoginManager:

app = Flask(__name__)

@app.context_processor
def inject_production_status():
    return dict(production=True)

# Initialise flask_login
login = LoginManager(app)
login.login_view = 'login'
login.refresh_view = "login"
login.needs_refresh_message = "Please sign in again to access this page"

UserManager определяется в нижняя часть models.py:

user_manager = UserManager(app, db, User)

Ответы [ 2 ]

2 голосов
/ 10 мая 2020

Я применил предложение @JBLaf, но это не решило проблему. Я понял, что страница входа по умолчанию, которую я представляла, на самом деле была не шаблоном flask-login login.html, а его шаблоном login_auth0.html. Это был шаблон, который я не заменял в своей собственной папке flask_user, так как не считал это необходимым.

Два способа решить эту проблему:

  1. Set USER_ENABLE_AUTH0 = False. Это заставляет его использовать шаблон login.html, который является моим собственным. Однако в дальнейшем это вызвало у меня проблемы, потому что я разрешил вход в систему через систему единого входа. Таким образом, лучшим решением было:
  2. Создать файл login-auth0.html в моей templates/flask_user папке, содержащий только строку {% include 'flask_user/login.html' %}.

Теперь Flask - Пользователь попробует для перенаправления на шаблон auth0, который вместо этого отобразит мой шаблон login.html.

0 голосов
/ 10 мая 2020

UserManager необходимо инициализировать в __init__.py, а не в models.py. UserManager позаботится об инициализации LoginManager.

Вам нужно заменить в __init__.py:

# Initialize flask_login
login = UserManager (app, db, User)
login.login_view = 'login'
login.refresh_view = "login"
login.needs_refresh_message = "Please sign in again to access this page"

на

# Initialize flask_user
from .models.user_models import User
user_manager = UserManager (app, db, User)
...
# login is now accessible by user_manager.login_manager

(И удалите его из models.py)

Вот пример: https://github.com/lingthio/Flask-User-starter-app/blob/master/app/ init .py

Не имеет отношения к вопросу, но на всякий случай : В долгосрочной перспективе вам будет легче взглянуть на app.config.from_object, чтобы упростить обработку конфигураций производства и разработки.

...