gpt4 book ai didi

django - 如何在 Django 中强制用户注销?

转载 作者:行者123 更新时间:2023-11-28 19:33:18 24 4
gpt4 key购买 nike

在某些情况下,在我的 Django 应用程序中,我希望能够强制用户通过用户名注销。不一定是当前登录的用户,而是另一个用户。因此,我认为请求方法没有任何关于我要注销的用户的 session 信息。

我熟悉 django.auth 和 auth。注销方法,但它以请求作为参数。如果我只有用户名,是否有“Django 方式”来注销用户?还是我必须推出自己的注销 SQL?

最佳答案

更新:

从 Django 1.7 开始,用户在密码更改时会自动注销。在每个请求中,当前密码哈希值会与 session 中保存的值进行比较,如果不匹配,用户将被注销。

因此,一个简单的密码更新具有使用户注销的效果。然后您可以禁用该帐户登录,或建议他们使用密码重置功能设置新密码并重新登录。

原文:

我不认为在 Django 中有一个被认可的方法来做到这一点。

用户标识存储在 session 对象中,但它是经过编码的。不幸的是,这意味着您必须遍历所有 session 、解码和比较...

两步:

首先删除目标用户的 session 对象。如果他们从多台计算机登录,他们将拥有多个 session 对象。

from django.contrib.sessions.models import Session
from django.contrib.auth.models import User

# grab the user in question
user = User.objects.get(username='johndoe')

[s.delete() for s in Session.objects.all() if s.get_decoded().get('_auth_user_id') == user.id]

然后,如果需要,将它们锁定......

user.is_active = False
user.save()

关于django - 如何在 Django 中强制用户注销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/953879/

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