我已经为LDAP3身份验证编写了login.views.py
,并且应用程序是这样的,一旦用户成功登录,它将使用户转到欢迎“用户名”显示的模板在所有未来请求页面的右上角。我的此登录模块的应用程序配置为 __init__.py
。有关用户是否经过身份验证的模板代码的一部分是here。
使用Flask的开发服务器登录后,所有上述代码都会在所有将来的请求(即应用程序的不同模块)中保留用户名;但是,当我将应用程序实时部署到生产服务器(nginx,uwsgi)时,用户名有时会保留,其他时间不会持久存在。
我在StackOverflow上跟随过两个类似的问题:first question和second question,但仍然无法理解解决我的问题。
成功登录后,如何保留用户信息以用于将来的所有请求?
答案 0 :(得分:1)
您无法在Flask应用中使用全局变量。您有一个users
dict来存储从LDAP获取的用户。在开发期间,这“工作”,因为开发服务器只使用一个进程。但是,在生产中,您最有可能在多个进程中运行应用程序。每个进程都有自己的users
dict,因此只有在请求由处理用户登录的同一进程处理时才会加载用户。
您需要将用户数据存储在与应用程序分开的某个位置,以便在每个请求期间查找它。典型示例是数据库,但在这种情况下,您使用的是LDAP,只需通过加载程序函数中的LDAP从id获取用户数据。如果您试图避免向LDAP发出查询,那么您需要一些其他外部存储来存储和获取数据,例如数据库,内存缓存,redis等。您还可以在会话中抛出用户数据。 / p>