我在这里发现了一个类似的问题,但答案似乎对我不起作用。
我使用Flask User(我相信它扩展了Flask Login(,在大多数情况下它运行得很好。我建立了自己全新的登录和注册模板,而不是使用他们提供的模板。根据文档,我将这些模板放置在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(这不是错误的登录模板。
如果有人能为我提供任何帮助,我将不胜感激。
编辑:
__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-login
的login.html
模板,而是它的login_auth0.html
模板。这是一个我没有在自己的flask_user
文件夹中替换的模板,因为我认为没有必要。
解决此问题的两种方法:
- 设置
USER_ENABLE_AUTH0 = False
。这使得它使用login.html
模板,这是我自己的自定义模板。然而,这给我带来了一些问题,因为我确实允许SSO登录。因此,更好的解决方案是: - 在我的
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
,以更轻松地处理生产和开发配置。