Django中的用户认证
有没有办法确保一个用户只能登录一次呢?
我想避免两个不同的人用相同的账号和密码登录系统。
我想我可以自己在用户登录之前,先检查一下django_session这个表,但我更希望能直接使用框架,如果框架里已经有这样的功能的话。
2 个回答
4
我去年做的网站担心用户名和密码可能会被发到论坛上。为了解决这个问题,我在登录界面添加了一个检查,看看在过去的X小时内,这个用户名是从多少个不同的IP地址登录过的。我在settings.py文件里给网站管理员设置了两个值,可以调整时间和唯一IP的数量。如果一个用户名被“过度使用”,那么它就会被阻止从新的IP地址登录,直到时间过去,低于设定的阈值。
让他们感到惊讶的是,过去一年里,只有一个用户名触发了这个阻止,而这个用户名的主人竟然是公司的总裁,他在出差期间不断从不同的地方登录。
5
在HTTP中,登录两次是个模糊的概念。因为没有“断开连接”的信号会被发送出去。如果不小心处理,可能会让用户感到很困扰。
比如说,如果我不小心关闭了浏览器并清除了cookies,我可能会被阻止再次登录。
那么,服务器怎么知道是我在尝试重新登录,而不是我在尝试重复登录呢?
你可以尝试通过检查IP地址来解决这个问题。但如果我不小心断开连接是因为我的路由器崩溃了,导致我的DHCP租约失效呢?这时候我想重新登录,但我换了个新地址,而且没有有效的cookie。我并不是想创建第二个会话,我只是想在当前会话断开后重新连接。
关键是,目前没有一个公认的“单一会话”规则可以直接应用到框架中。你需要根据自己的应用程序制定一个合适的规则,并想办法去执行它。