首先: 与this相同。 ModelBackend没有request
成员。
我想访问当前用户的会话而无法访问全局请求对象或他/她的会话ID。
为什么呢?我编写了自己的身份验证后端,扩展了ModelBackend
。因为我有函数get_user (self, user_id)
,每次请求都会调用它(这是由Django auth中间件自动完成的)。不幸的是,get_user
无权访问request
,但在我的情况下,我想检查会话中的数据(为什么又一次?因为我没有本地数据库并获取所有数据来自远程中间件。会话将是一种舒适的方式来进行某种缓存。)
答案 0 :(得分:6)
您可以使用微小的ThreadLocalMiddleware。它使请求对象随处可用。
from django_tools.middlewares import ThreadLocal
request = ThreadLocal.get_current_request()
# request.session <-- is now available
不要忘记将中间件添加到settings.py的MIDDLEWARE_CLASSES元组中:
MIDDLEWARE_CLASSES = (
...
'django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware',
...
)
答案 1 :(得分:4)
RemoteUserBackend
(来自django.contrib.auth.backends
)使用特殊中间件RemoteUserMiddleware
来访问请求数据。也许你也可以这样做。
答案 2 :(得分:0)
您也可以在任何时候将“请求”参数传递给authenticate
函数:
def authenticate(self, request, **kwargs):
....