重写认证方法 - Django 管理后台

6 投票
2 回答
3622 浏览
提问于 2025-04-16 07:10

我正在想办法如何给认证方法增加一些额外的功能。

比如说:

  • 密码过期
  • 特殊的密码格式
  • 长度要求
  • 等等...

对于网站的前端来说,这个问题比较简单,但管理员面板呢?


我觉得我应该重写用户管理对象,因为认证功能可能就在那儿。我觉得这个问题挺难解决的。

提前谢谢大家!:)

2 个回答

0

如果你想把密码验证的功能直接放到模型里,那你可能需要扩展Django的用户模型

如果不想这样做,你可以试试以下方法:

  • 通过创建自己的视图来覆盖管理员的密码选项,这样可以更改和设置密码,然后把相关的URL放在(r'^admin/', include(admin.site.urls))的上面。正则表达式大概是(r'^admin/auth/user/(\d+)/password/', new_change_password)
  • 在一个单独的模型中记录密码的使用时间,当密码过期时,自动跳转到修改密码的页面。
6

你可以按照这个链接中的说明来创建自定义的认证后端:http://docs.djangoproject.com/en/dev/topics/auth/#authentication-backends。简单来说,你需要创建一个后端类,这个类里面要有一个叫做 authenticate 的方法:

class MyBackend:
    def authenticate(self, username=None, password=None):
        # Check the username/password and return a User.

然后把这个类添加到 AUTHENTICATION_BACKENDS 里,位置是在 settings.py 文件中。

虽然这个是用来做认证的,但你也可以处理密码验证的事情,比如说如果用户的密码正确但过期了,你可以直接把他引导到一个修改密码的页面。你可以考虑使用 消息框架,这样在引导用户去修改密码页面的时候,可以给他一些提示,让他知道发生了什么。

撰写回答