我如何从缓存的后端会话中找到 Django 用户

How can i find django user from cached backend session

我时不时收到一些错误邮件,我找不到用户。

我能得到的所有信息是sessionid and csrf cookie

这些在许多电子邮件中都是相同的,所以我认为用户是其中之一,但我如何找到它,因为我没有使用数据库会话,而是使用缓存的会话引擎。

如果您的 SESSION_ENGINE 设置为:

  • "django.contrib.sessions.backends.cached_db":结合使用缓存和数据库,可以从数据库中查找该会话。

  • "django.contrib.sessions.backends.cache" :仅缓存;没有持久性,您将不得不从缓存中查找该会话,但如果缓存已满或缓存服务器重新启动,则必须足够快才能驱逐缓存数据。在这里,您必须在发生错误时查找会话,例如,您需要处理由该错误引起的异常,此时,您可以使用会话或请求查找用户并将用户存储在日志中。

正如您所说 "These are same in many emails so i think the user is one" 因此,当您收到电子邮件时,会话可能仍存在于缓存中!因此,在缓存中查找它,例如,如果在缓存中使用其 "sessionid" 标识(密钥)会话,请尝试使用 "sessionid" 作为密钥来获取它。

from django.core.cache import cache
session = cache.get(sessionid)

然后获取用户:

from django.contrib.auth.models import User
data = session.get_decoded()
uid = data.get('_auth_user_id', None)
user = User.objects.get(id = uid)

这只是一个提示,我不确定它是否有效,因为我的设置与您的设置不同。