如何使用LDAP3身份验证为所有将来的请求持久化用户名



我已经为LDAP3身份验证编写了一个login.views.py,并且该应用程序是这样的,一旦用户成功登录,它将带用户到一个模板,其中Welcome "username"显示在所有未来请求页面的右上角。这个登录模块的应用程序配置是__init__.py。关于用户是否通过身份验证的部分模板代码在这里。

一旦使用Flask的开发服务器登录,所有上述代码都会在所有未来的请求(即应用程序的不同模块)中保留用户名;然而,当我将应用程序实时部署到生产服务器(nginx, uwsgi)时,用户名有时被持久化,而其他时间不持久化。

我在StackOverflow上跟踪了两个类似的问题:第一个问题和第二个问题,但仍然无法理解解决我的问题。

我如何保存用户的信息,一旦他们成功登录所有未来的请求?

你不能在Flask应用中使用全局变量。您有一个users字典来存储从LDAP获取的用户。在开发过程中,这"有效",因为开发服务器只使用一个进程。但是,在生产环境中,您很可能在多个进程中运行应用程序。每个进程都有自己的users字典,所以只有当请求由处理用户登录的进程处理时,用户才会被加载。

您需要将用户数据存储在与应用程序分开的地方,以便在每次请求期间查找。典型的例子是数据库,但在本例中使用的是LDAP,只需在加载器函数中根据id从LDAP获取用户数据。如果您试图避免对LDAP进行查询,那么您需要一些其他外部存储来存储和获取数据,例如数据库、memcache、redis等。您也可以直接将用户数据扔到会话中。

最新更新