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实现从URL地址提取文件名的方法
May 15 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
一看就懂得Python的math模块
Oct 21 Python
Django之编辑时根据条件跳转回原页面的方法
Aug 21 Python
Python 实现大整数乘法算法的示例代码
Sep 17 Python
python 实现仿微信聊天时间格式化显示的代码
Apr 17 Python
Django Admin 上传文件到七牛云的示例代码
Jun 20 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
Jul 28 Python
Python字典dict常用方法函数实例
Nov 09 Python
如何利用python正则表达式匹配版本信息
Dec 09 Python
通过python-pptx模块操作ppt文件的方法
Dec 26 Python
Python语法学习之进程的创建与常用方法详解
Apr 08 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使用websocket示例详解
2014/03/12 PHP
漂亮的仿flash菜单,来自蓝色经典
2006/06/26 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
js中继承的几种用法总结(apply,call,prototype)
2013/12/26 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
webpack v4 从dev到prd的方法
2018/04/02 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
Element输入框带历史查询记录的实现示例
2019/01/15 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
Python解析json文件相关知识学习
2016/03/01 Python
Python端口扫描简单程序
2016/11/10 Python
Python使用sorted排序的方法小结
2017/07/28 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
Python实现从log日志中提取ip的方法【正则提取】
2018/03/31 Python
一文了解Python并发编程的工程实现方法
2019/05/31 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
python手写均值滤波
2020/02/19 Python
python中wx模块的具体使用方法
2020/05/15 Python
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
外企C语言笔试题
2013/11/10 面试题
连锁经营管理专业大学生求职信
2013/10/30 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
授权委托书公证
2014/09/14 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
python常见的占位符总结及用法
2021/07/02 Python
Python anaconda安装库命令详解
2021/10/16 Python