Django 自定义用户登录认证

栏目: Python · 发布时间: 4年前

内容简介:有时候 Django 自带的用户登录认证不能满足我们的需求,比如我不想要用户名+密码登录,我想手机号+验证码登录,这样就需要我们去修改 Django 自带的认证了。Django 默认使用用户认证的是先看看原码理解一下认证逻辑:

有时候 Django 自带的用户登录认证不能满足我们的需求,比如我不想要用户名+密码登录,我想手机号+验证码登录,这样就需要我们去修改 Django 自带的认证了。

Django 默认使用用户认证的是 ModelBackend ,这个类也就是我们要下手的地方, ModelBackend 里面有一个 authenticate 的方法,这个方法就是登录时对用户认证的方法。我们要改的就是这个方法。

先看看原码理解一下认证逻辑:

Django 自定义用户登录认证

第15-16行先获取认证用的用户名字段,默认是 username ,如果在 User model里面重新定义了 USERNAME_FIELD ,如改为 USERNAME_FIELD = 'mobile' ,那么现在就是以手机号来登录了。

第18-22行就是根据 username 去获取 user 对象,如果没有这个 user 就做一次密码 hasher (不太理解这里的作用,不过不影响修改),然后就退出方法了。

第24-25行就是获取到用户后,验证用户传过来的密码跟数据库里的是否一致并且该用户是否有登录权限,验证都通过后就把 user 返回去,否则退出返回,不返回任何东西。

明白了认证的逻辑,就开始修改了,首先新建一个类,继承 ModelBackend ,然后重写 authenticate 方法,比如上面提到的改为手机号+验证码的方式,只要改成如下:

Django 自定义用户登录认证

只是稍微的做了点修改,把第24行里的密码验证改为了验证码验证,这里password 字段用于存放验证码,而不再是用户的密码了。其它的逻辑都没变。

这里改了之后,要在 User model 里加上 check_verify_code 这个方法,否则会报错,还要修改类变量 USERNAME_FIELD = 'mobile' ,不然还是会以 username 来认证,具体的实现逻辑根据自己的实际情况来,这里就不展示里面的逻辑。

好,用户的认证改好了,还有最重要的一步,在 settings.py 里添加一条这样的配置:

AUTHENTICATION_BACKENDS = ['common.backends.CustomModelBackends'] # 里面改成自己写的认证类。格式必须是 包名.文件名.类名

到此就完成了。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Fortran95程序设计

Fortran95程序设计

彭国伦 / 中国电力出版社 / 2002-9 / 59.00元

本书介绍了当前国际上广泛流行的高级算法语言Fortran的全新版本Fortran 95。 本书循序渐进、由浅到深,使用结构化及面向对象程序设计观念,以简捷明了的方式把Fortran 95介绍给读者。书中主要讲述了Fortran 95程序设计的方法,包括数值计算、计算机绘图、窗口程序设计、与Visual C/Visual Basic/Delphi的链接、甚至是游戏程序的编写。 本书语言简洁,实......一起来看看 《Fortran95程序设计》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码