我正在重写一个传统应用程序,每个客户都有自己的数据库、验证和用户集。因此,我需要一个自定义的身份验证后端,因为Django的auth只能使用默认设置。我编写了中间件,它在每个请求时检查URL并提取信息以设置请求中的database_name。
如果我在自定义身份验证后端处理期间可以访问请求,我可以轻松地通过
我唯一能看到仍然使用django-auth的解决方案是为每个客户创建一个身份验证后端,将要使用的数据库名称设置为类属性。然后,我会创建一个自定义登录函数,将request.session['_auth_user_backend']设置为特定于客户的后端。因此,在每个请求上调用get_user(user_id)时,它将使用知道从哪个数据库请求的客户后端。
如果可能,我想避免管理每个客户的身份验证后端。还有更好的方法吗?
如果我在自定义身份验证后端处理期间可以访问请求,我可以轻松地通过
user = User.objects.using(request.db).get(username=username)
执行数据库调用。然而,我没有看到容易实现这一点的方法。我在这里看到了一个答案:Access request.session from backend.get_user,但这似乎不是线程安全的,所以我不想走这条路。我唯一能看到仍然使用django-auth的解决方案是为每个客户创建一个身份验证后端,将要使用的数据库名称设置为类属性。然后,我会创建一个自定义登录函数,将request.session['_auth_user_backend']设置为特定于客户的后端。因此,在每个请求上调用get_user(user_id)时,它将使用知道从哪个数据库请求的客户后端。
如果可能,我想避免管理每个客户的身份验证后端。还有更好的方法吗?
def get_user(self, user_id):
时对身份验证后端有所帮助。当这个调用发生时,我无法访问请求,只有一个ID可以使用。除非我入侵并完全更改后端,否则我怎么知道该指向哪里?我认为可能没有更好的方法。 :( - DivineSlayer