12

首先: this和this一样。ModelBackend 没有成员。request

我想访问当前用户的会话而不访问全局请求对象或他/她的会话 ID。

为什么?我编写了自己的身份验证后端,扩展了ModelBackend. 因为我有函数get_user (self, user_id),每个请求都会调用它(这是由 Django auth 中间件自动完成的)。不幸的是,get_user无权访问request,但在我的情况下,我想检查会话中的数据(为什么再说一遍?因为我没有本地数据库并从远程中间件获取所有数据。会话将是进行某种缓存的舒适方式)。

4

3 回答 3

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',
    ...
)
于 2013-01-14T05:53:58.807 回答
4

( RemoteUserBackendfrom django.contrib.auth.backends) 使用特殊的中间件RemoteUserMiddleware, 来访问请求数据。也许你也可以这样做。

于 2009-07-10T20:19:44.953 回答
0

您还可以在调用函数时将“请求”参数传递给authenticate函数:

def authenticate(self, request, **kwargs):
    ....
于 2013-05-08T13:39:46.257 回答