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开发之文件操作用法实例
Nov 13 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
Python语言描述最大连续子序列和
Dec 05 Python
Python进程间通信Queue实例解析
Jan 25 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 Python
Centos下实现安装Python3.6和Python2共存
Aug 15 Python
python三引号输出方法
Feb 27 Python
Python实现的合并两个有序数组算法示例
Mar 04 Python
Python Django 命名空间模式的实现
Aug 09 Python
python将时分秒转换成秒的实例
Dec 07 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
python3 自动打印出最新版本执行的mysql2redis实例
Apr 09 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
dedecms中常见问题修改方法总结
2007/03/21 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
yii操作session实例简介
2014/07/31 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
json数据处理及数据绑定
2017/01/25 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
2017/07/09 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
JS实现省市县三级下拉联动
2020/04/10 Javascript
[01:38]完美世界DOTA2联赛PWL S3 集锦第四期
2020/12/21 DOTA
python网络爬虫采集联想词示例
2014/02/11 Python
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
理解Python中的绝对路径和相对路径
2017/08/30 Python
78行Python代码实现现微信撤回消息功能
2018/07/26 Python
Pyqt5 基本界面组件之inputDialog的使用
2019/06/25 Python
Python:type、object、class与内置类型实例
2019/12/25 Python
Python MySQLdb 执行sql语句时的参数传递方式
2020/03/04 Python
解决Jupyter无法导入已安装的 module问题
2020/04/17 Python
CSS3中Color的一些特性介绍
2012/05/27 HTML / CSS
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
进修护士自我鉴定
2013/10/14 职场文书
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
汽车机修工岗位职责
2014/03/06 职场文书
应聘英语教师求职信
2014/04/24 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
运动员加油词
2015/07/18 职场文书
二十年同学聚会感言
2015/07/30 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js