2

我有一个自定义用户模型,我想在其中跟踪失败的登录尝试次数并据此采取行动。我想知道写这个逻辑的更好的地方是什么。

以下是我在更新用户模型中的 *failed_attempts* 字段时想到的两个选项:

  1. 在后端验证方法。
  2. User 模型中的 *check_password* 方法。我已经从 AbstractBaseUser 模型中覆盖了这个方法。

基本逻辑(不包括所有情况)是这样的:

  • 如果身份验证失败,请检查上一次登录尝试失败的时间。
  • 如果那是最近的,则增加失败的登录计数。
  • 如果计数达到最大尝试锁定帐户几分钟(或做其他事情)。

我的问题是写这个逻辑的更好的地方是什么以及为什么。

4

2 回答 2

1

仅使用您列出的详细信息,我会说 Authentication 方法更合适,如果只是因为如果更新模型上的字段会非常混乱。check_password

但是,为什么您既有“支持的身份验证方法”又有check_password模型中的方法?

于 2012-12-19T21:28:48.980 回答
1

什么:我实际上会在身份验证后端实现该逻辑。

如何:使用特定的、单独的模型来跟踪登录尝试,或者使用 miko (fail2ban) 建议的解决方案。

原因:您将身份验证与用户分离。奖励:如果您想利用UserDjango 中即将推出的可插拔模型,那是个好主意。


附带说明一下,您可能有一种方法可以通过包装现有的身份验证后端以提供所需的功能来实现更“整洁”的解决方案。

于 2012-12-20T01:53:19.827 回答