gpt4 book ai didi

Django,request.user 始终是匿名用户

转载 作者:行者123 更新时间:2023-12-04 02:51:05 28 4
gpt4 key购买 nike

我正在为 Django 使用自定义身份验证后端(从 couchdb 运行)。我有一个自定义用户模型。

作为登录的一部分,我正在执行 request.user = user并将用户ID保存在 session 中。
但是,在后续请求中,我无法检索 request.user。它始终是 AnonymousUser。但是,我可以从 session 中检索用户 ID,并且可以确认 session cookie 设置正确。

我错过了什么?

我不想使用关系数据库,因为我想在 couchdb 中维护我的所有用户数据。

编辑 : 我写了一个不继承自 Django 的 auth User 的类。但是,它具有用户名和电子邮件属性。出于这个原因,我的后端不返回派生自 auth User 的类。

最佳答案

request.userdjango.contrib.auth.middleware.AuthenticationMiddleware 设置.

查看 django/contrib/auth/middleware.py :

class LazyUser(object):
def __get__(self, request, obj_type=None):
if not hasattr(request, '_cached_user'):
from django.contrib.auth import get_user
request._cached_user = get_user(request)
return request._cached_user

class AuthenticationMiddleware(object):
def process_request(self, request):
request.__class__.user = LazyUser()
return None

那就看 get_user django/contrib/auth/__init__.py中的函数:
def get_user(request):
from django.contrib.auth.models import AnonymousUser
try:
user_id = request.session[SESSION_KEY]
backend_path = request.session[BACKEND_SESSION_KEY]
backend = load_backend(backend_path)
user = backend.get_user(user_id) or AnonymousUser()
except KeyError:
user = AnonymousUser()
return user

您的后端将需要实现 get_user功能。

关于Django,request.user 始终是匿名用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5376985/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com