Python如何实现后端自定义认证并实现多条件登陆


Posted in Python onJune 22, 2020

1.须知

JWT扩展的登录视图,在收到用户名与密码时,也是调用Django的认证系统Auth模型中提供的**authenticate()**来检查用户名与密码是否正确。

我们可以通过修改Django认证系统的认证后端(主要是authenticate方法)来支持登录账号既可以是用户名也可以是手机号。

`authenticate(self, request, username=None, password=None, **kwargs)`方法的参数说明:

  • - request 本次认证的请求对象
  • - username 本次认证提供的用户账号
  • - password 本次认证提供的密码

我们想要让用户既可以以用户名登录,也可以以手机号登录,那么对于authenticate方法而言,username参数即表示用户名或者手机号。

重写authenticate方法的思路:

1. 根据username参数查找用户User对象,username参数可能是用户名,也可能是手机号
2. 若查找到User对象,调用User对象的check_password方法检查密码是否正确

2. 添加自定义认证函数,在users/utils.py中编写:

"""实现多条件登录"""
from django.contrib.auth.backends import ModelBackend
from .models import User
from django.db.models import Q

def get_user_by_account(account):
  """通过账号信息获取用户"""
  try:
    user = User.objects.get(Q(username=account) | Q(mobile=account) )
  except User.DoesNotExist:
    user = None
  return user

class UsernameMobileAuthBackend(ModelBackend):
  def authenticate(self, request, username=None, password=None, **kwargs):
    # 获取用户
    user = get_user_by_account(username)

    # 验证密码和是否允许登录
    if user is not None and user.check_password(password) and self.user_can_authenticate(user):
      return user

3.在配置文件settings/dev.py中告知Django使用我们自定义的认证后端

AUTHENTICATION_BACKENDS = [
'users.utils.UsernameMobileAuthBackend',
]

在配置文件中进行设置,就是将自定义认证函数的地址告知django认证系统

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
一篇不错的Python入门教程
Feb 08 Python
python del()函数用法
Mar 24 Python
Python生成器定义与简单用法实例分析
Apr 30 Python
使用 Python 处理 JSON 格式的数据
Jul 22 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 Python
Python 获取项目根路径的代码
Sep 27 Python
python多维数组分位数的求取方式
Mar 03 Python
Python importlib动态导入模块实现代码
Apr 16 Python
Django model class Meta原理解析
Nov 14 Python
写好Python代码的几条重要技巧
May 21 Python
用Python编写简单的gRPC服务的详细过程
Jul 04 Python
零基础小白多久能学会python
Jun 22 #Python
Keras-多输入多输出实例(多任务)
Jun 22 #Python
python和c语言哪个更适合初学者
Jun 22 #Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 #Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 #Python
keras 多任务多loss实例
Jun 22 #Python
python对execl 处理操作代码
Jun 22 #Python
You might like
php下获取客户端ip地址的函数
2010/03/15 PHP
深入php 正则表达式的学习探讨
2013/06/06 PHP
PHP生成Gif图片验证码
2013/10/27 PHP
thinkphp常见路径用法分析
2014/12/02 PHP
Yii2.0 Basic代码中路由链接被转义的处理方法
2016/09/21 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
五段实用的js高级技巧
2011/12/20 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
原生js和jquery分别实现横向导航菜单效果
2016/05/13 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
js实现五星评价功能
2017/03/08 Javascript
使用vue实现简单键盘的示例(支持移动端和pc端)
2017/12/25 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
使用axios发送post请求,将JSON数据改为form类型的示例
2019/10/31 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
js实现3D旋转效果
2020/08/18 Javascript
python复制文件到指定目录的实例
2018/04/27 Python
浅述python2与python3的简单区别
2018/09/19 Python
对Python 语音识别框架详解
2018/12/24 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
销售代表求职自荐信
2013/10/01 职场文书
材料物理专业个人求职信
2013/12/15 职场文书
小学教师师德感言
2014/02/10 职场文书
建材投资建议书
2014/05/16 职场文书
学习型家庭事迹材料
2014/12/20 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书