Django中的用户认证

3 投票
2 回答
1318 浏览
提问于 2025-04-11 18:57

有没有办法确保一个用户只能登录一次呢?

我想避免两个不同的人用相同的账号和密码登录系统。

我想我可以自己在用户登录之前,先检查一下django_session这个表,但我更希望能直接使用框架,如果框架里已经有这样的功能的话。

2 个回答

4

我去年做的网站担心用户名和密码可能会被发到论坛上。为了解决这个问题,我在登录界面添加了一个检查,看看在过去的X小时内,这个用户名是从多少个不同的IP地址登录过的。我在settings.py文件里给网站管理员设置了两个值,可以调整时间和唯一IP的数量。如果一个用户名被“过度使用”,那么它就会被阻止从新的IP地址登录,直到时间过去,低于设定的阈值。

让他们感到惊讶的是,过去一年里,只有一个用户名触发了这个阻止,而这个用户名的主人竟然是公司的总裁,他在出差期间不断从不同的地方登录。

5

在HTTP中,登录两次是个模糊的概念。因为没有“断开连接”的信号会被发送出去。如果不小心处理,可能会让用户感到很困扰。

比如说,如果我不小心关闭了浏览器并清除了cookies,我可能会被阻止再次登录。

那么,服务器怎么知道是我在尝试重新登录,而不是我在尝试重复登录呢?

你可以尝试通过检查IP地址来解决这个问题。但如果我不小心断开连接是因为我的路由器崩溃了,导致我的DHCP租约失效呢?这时候我想重新登录,但我换了个新地址,而且没有有效的cookie。我并不是想创建第二个会话,我只是想在当前会话断开后重新连接。

关键是,目前没有一个公认的“单一会话”规则可以直接应用到框架中。你需要根据自己的应用程序制定一个合适的规则,并想办法去执行它。

撰写回答