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代码检查工具pylint 让你的python更规范
Sep 05 Python
初步理解Python进程的信号通讯
Apr 09 Python
在Python中使用判断语句和循环的教程
Apr 25 Python
Python基本语法经典教程
Mar 11 Python
简单谈谈python中的多进程
Nov 06 Python
Python对象属性自动更新操作示例
Jun 15 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
Python3.5装饰器典型案例分析
Apr 30 Python
python多线程分块读取文件
Aug 29 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
python如何求数组连续最大和的示例代码
Feb 04 Python
python实现图片素描效果
Sep 26 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
模仿OSO的论坛(四)
2006/10/09 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
jQuery validate插件实现ajax验证重复的2种方法
2016/01/22 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
详解原生js实现offset方法
2017/06/15 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
vue中进行微博分享的实例讲解
2019/10/14 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
2020/05/31 Javascript
vue - props 声明数组和对象操作
2020/07/30 Javascript
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
Python制作钉钉加密/解密工具
2016/12/07 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
2018/05/29 Python
python实现银行管理系统
2019/10/25 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
Python中six模块基础用法
2019/12/08 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
html5唤醒APP小记
2019/03/27 HTML / CSS
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
优秀班集体先进事迹材料
2014/05/28 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
民主评议党员工作总结
2014/10/20 职场文书
幼儿园见习报告
2014/10/30 职场文书
业务员管理制度范本
2015/08/06 职场文书
重阳节主题班会
2015/08/17 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
2016年全国爱眼日宣传教育活动总结
2016/04/05 职场文书