Django Session新手, 我想阻止多次登录来自同一凭证。
class UserManager(models.Model):
"""
It hold session_key used for log-in for particular user.
"""
user = models.OneToOneField(User, db_index=True)
session = models.OneToOneField(
Session, null=True, on_delete=models.SET_NULL
)
def session_post_save(**kwargs):
session = kwargs['instance']
uid = session.get_decoded().get('_auth_user_id')
if uid:
profile = UserManager.objects.get(user__id=uid)
# delete old session
if profile.session:
profile.session.delete()
# update session value
profile.session = session
profile.save()
post_save.connect(session_post_save, sender=Session,
dispatch_uid='session_post_save_add_usermanager')
问题是,我无法弄清楚为什么session_post_save方法被调用两次?或会议的工作?
第一次调用用户login()
方法,并且session.get_decoded().get('_auth_user_id')
为“无”,然后在某个函数django/contrib/sessions/backends/base.py(279)cycle_key()
中将会话删除。不知道为什么?
再次插回来。
第二次在发送响应时调用session_post_save方法,session.get_decoded().get('_auth_user_id')
不是None。
由于
答案 0 :(得分:0)
这是另一个问题,其中包含有关如何实现此目标的IP地址的一些建议