Django:如何测试用户当前是否已登录

时间:2014-01-15 20:56:18

标签: python django login

我需要一些帮助来了解如何测试用户当前是否已登录。我在网上搜索,发现有一些解决方法可以从请求中提取用户并测试它:

if request.user.is_authenticated():

然而,在我的情况下,我需要以下内容:

user = User.objects.get(id=1)
if user.is_logging_in():
    # do something
else:
    # do something else

Django中是否存在这种功能?谢谢!

1 个答案:

答案 0 :(得分:1)

我不相信该信息以受支持的方式存在。我的理解是,用户身份验证系统使用SessionMiddleware来存储会话是否具有与之关联的经过身份验证的用户。为了澄清,当用户登录时,会话存储的数据表明另一方的客户端是用户等等。

您需要做的是完成所有会话并确定会话是否具有关联用户,如果是,则确定该用户是谁。据我所知,没有办法迭代会话,但我可能是错的。

this answer我找到了一种可以达到同样效果的方法。

from django.contrib.auth.signals import user_logged_in, user_logged_out

def record_user_logged_in(sender, user, request, **kwargs):
    # Record the user logged in

def record_user_logged_out(sender, user, request, **kwargs):
    # Record the user logged out

user_logged_in.connect(record_user_logged_in)
user_logged_out.connect(record_user_logged_out)

我会告诉你如何存储与登录/退出相关的信息,但模型是一种很好的方法。我应该指出,我不相信这会涵盖用户凭据超时的情况(从会话超时)。

此外,我刚遇到this answer链接here这是一个跟踪活跃用户的项目。我不确定它增加了多少开销,但只是想我会添加它。