代码之家  ›  专栏  ›  技术社区  ›  Boldewyn

从backend.get用户访问request.session

  •  12
  • Boldewyn  · 技术社区  · 15 年前

    首先:这是 一样 this . modelbackend没有 request 成员。

    我希望访问当前用户的会话,而不访问全局请求对象或其会话ID。

    为什么?我编写了自己的身份验证后端,扩展 ModelBackend . 因为我有这个功能 get_user (self, user_id) ,在每次请求时调用(这由Django-Auth中间件自动完成)。不幸的是, get_user 无法访问 请求 但是,在我的例子中,我想检查会话中的数据(为什么要再次检查?因为我没有本地数据库,也没有从远程中间件获取所有数据。会话将是进行某种缓存的舒适方式)。

    3 回复  |  直到 10 年前
        1
  •  4
  •   drdaeman    10 年前

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

        2
  •  6
  •   Jeremi    11 年前

    你可以用小号的 ThreadLocalMiddleware . 它使请求对象在任何地方都可用。

    from django_tools.middlewares import ThreadLocal
    
    request = ThreadLocal.get_current_request()
    # request.session <-- is now available
    

    不要忘记将中间件添加到您的设置的中间件类元组中。py:

    MIDDLEWARE_CLASSES = (
        ...
        'django_tools.middlewares.ThreadLocal.ThreadLocalMiddleware',
        ...
    )
    
        3
  •  0
  •   littlegreen    11 年前

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

    def authenticate(self, request, **kwargs):
        ....