内容简介:有时候 Django 自带的用户登录认证不能满足我们的需求,比如我不想要用户名+密码登录,我想手机号+验证码登录,这样就需要我们去修改 Django 自带的认证了。Django 默认使用用户认证的是先看看原码理解一下认证逻辑:
有时候 Django 自带的用户登录认证不能满足我们的需求,比如我不想要用户名+密码登录,我想手机号+验证码登录,这样就需要我们去修改 Django 自带的认证了。
Django 默认使用用户认证的是 ModelBackend
,这个类也就是我们要下手的地方, ModelBackend
里面有一个 authenticate
的方法,这个方法就是登录时对用户认证的方法。我们要改的就是这个方法。
先看看原码理解一下认证逻辑:
第15-16行先获取认证用的用户名字段,默认是 username
,如果在 User
model里面重新定义了 USERNAME_FIELD
,如改为 USERNAME_FIELD = 'mobile'
,那么现在就是以手机号来登录了。
第18-22行就是根据 username 去获取 user 对象,如果没有这个 user 就做一次密码 hasher (不太理解这里的作用,不过不影响修改),然后就退出方法了。
第24-25行就是获取到用户后,验证用户传过来的密码跟数据库里的是否一致并且该用户是否有登录权限,验证都通过后就把 user 返回去,否则退出返回,不返回任何东西。
明白了认证的逻辑,就开始修改了,首先新建一个类,继承 ModelBackend
,然后重写 authenticate
方法,比如上面提到的改为手机号+验证码的方式,只要改成如下:
只是稍微的做了点修改,把第24行里的密码验证改为了验证码验证,这里password 字段用于存放验证码,而不再是用户的密码了。其它的逻辑都没变。
这里改了之后,要在 User
model 里加上 check_verify_code
这个方法,否则会报错,还要修改类变量 USERNAME_FIELD = 'mobile'
,不然还是会以 username
来认证,具体的实现逻辑根据自己的实际情况来,这里就不展示里面的逻辑。
好,用户的认证改好了,还有最重要的一步,在 settings.py
里添加一条这样的配置:
AUTHENTICATION_BACKENDS = ['common.backends.CustomModelBackends'] # 里面改成自己写的认证类。格式必须是 包名.文件名.类名
到此就完成了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- FineReport中如何自定义登录界面
- SpringBoot系列之使用自定义注解校验用户是否登录
- 使用GoAdmin极速搭建golang应用管理后台(二)——自定义登录页面
- Chrome OS 88 自定义屏保界面,可指纹登录第三方网站
- beego实现用户未登录跳转到登录页面
- Django实现小程序的登录验证功能,并维护登录态
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Fortran95程序设计
彭国伦 / 中国电力出版社 / 2002-9 / 59.00元
本书介绍了当前国际上广泛流行的高级算法语言Fortran的全新版本Fortran 95。 本书循序渐进、由浅到深,使用结构化及面向对象程序设计观念,以简捷明了的方式把Fortran 95介绍给读者。书中主要讲述了Fortran 95程序设计的方法,包括数值计算、计算机绘图、窗口程序设计、与Visual C/Visual Basic/Delphi的链接、甚至是游戏程序的编写。 本书语言简洁,实......一起来看看 《Fortran95程序设计》 这本书的介绍吧!
随机密码生成器
多种字符组合密码
HTML 编码/解码
HTML 编码/解码