在我的 Django 应用程序中,在某些条件下,我希望能够强制用户通过用户名注销。不一定是当前登录的用户,而是另一个用户。因此,我认为请求方法没有任何有关我要注销的用户的会话信息。
我熟悉 django.auth 和 auth。注销方法,但需要request作为一个论点。如果我只有用户名,是否有“Django 方式”来注销用户?或者我是否必须推出自己的注销 SQL?
Update:
从 Django 1.7 开始,用户在密码更改时会自动注销。对于每个请求,会将当前密码哈希值与其会话中保存的值进行比较,如果不匹配,则用户将被注销。
因此,简单的密码更新就会导致用户注销。然后,您可以禁用该帐户的登录权限,或建议他们使用密码重置功能设置新密码并重新登录。
原来的:
我认为 Django 中还没有一种认可的方法可以做到这一点。
用户 ID 存储在会话对象中,但它是经过编码的。不幸的是,这意味着您必须迭代所有会话、解码和比较......
两步:
首先删除目标用户的会话对象。如果他们从多台计算机登录,他们将拥有多个会话对象。
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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)