我也发现了一个类似的问题 此处但这个答案似乎对我不起作用。
我使用Flask用户(我相信是Flask登录的扩展),大部分情况下它工作得很好。我为登录和注册建立了自己的全新模板,而不是使用他们提供的模板。按照 文件我把这些模板放在了 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"
的底部定义了LoginManager: UserManager models.py
:
user_manager = UserManager(app, db, User)
我实施了@JBLaf的建议,但这并没有解决这个问题。我意识到,我所看到的默认登录页面实际上并不是我所看到的 flask-login
's login.html
模板,但其 login_auth0.html
的模板。这是一个模板,我在自己的 flask_user
文件夹,因为我认为没有必要。
有两种方法可以解决这个问题。
USER_ENABLE_AUTH0 = False
. 这使得它使用 login.html
模板,这是我自己定制的。但是,这给我下线带来了问题,因为我是允许SSO登录的。所以更好的解决方案是。login-auth0.html
档案在我 templates/flask_user
文件夹中,只包含行 {% include 'flask_user/login.html' %}
.现在Flask-User将尝试重定向到auth0模板,这将使我的 login.html
模板。
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.comlingthioFlask-User-starter-appblobmasterapp。启动.py
与问题无关,但只是以防万一。从长远来看,你会更容易看一看。app.config.from_object
以更容易地处理生产和开发配置。