覆盖烧瓶用户/烧瓶登录的默认模板



我在这里发现了一个类似的问题,但答案似乎对我不起作用。

我使用Flask User(我相信它扩展了Flask Login(,在大多数情况下它运行得很好。我建立了自己全新的登录和注册模板,而不是使用他们提供的模板。根据文档,我将这些模板放置在templates/flask_user/login.htmltemplates/flask_user/register.html等位置

我还在配置文件中设置了USER_UNAUTHENTICATED_ENDPOINT = "login"USER_UNAUTHORIZED_ENDPOINT = "login",其中login是我的登录路由的名称。

问题是,如果我已注销,并且试图直接访问需要用户登录的页面,我将被发送到http://localhost:5000/user/sign-in并显示Flask-Login登录页面。这有两个错误:1(这不是正确的登录路径,2(这不是错误的登录模板。

如果有人能为我提供任何帮助,我将不胜感激。

编辑:

__init__.py中初始化应用程序和登录管理员的代码:

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)

我实现了@JBLaf的建议,但这并没有解决问题。我意识到,我看到的默认登录页面实际上不是flask-loginlogin.html模板,而是它的login_auth0.html模板。这是一个我没有在自己的flask_user文件夹中替换的模板,因为我认为没有必要。

解决此问题的两种方法:

  1. 设置USER_ENABLE_AUTH0 = False。这使得它使用login.html模板,这是我自己的自定义模板。然而,这给我带来了一些问题,因为我确实允许SSO登录。因此,更好的解决方案是:
  2. 在我的templates/flask_user文件夹中创建一个仅包含行{% include 'flask_user/login.html' %}login-auth0.html文件

现在Flask用户将尝试重定向到auth0模板,它将呈现我的login.html模板。

UserManager需要在__init__.py中初始化,而不是在models.py中初始化。CCD_ 23将负责CCD_ 24的初始化。

您需要在__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,以更轻松地处理生产和开发配置。

最新更新