当前位置: 首页 > news >正文

Django多字段认证的实现

Django多字段认证

需求:

django认证的检查用户是username,如果使用 username和 手机号验证登录。

重写:

ModelBackend 类下的 authenticate 方法

# 在对应应用下创建 utils.py""" 修改Django认证类,为了实现 username和手机号登录 """from django.contrib.auth.backends import ModelBackend
from django.db.models import Qfrom .models import Userdef get_user_by_account(account):"""通过传入的账号动态获取 user 模型对象:param account: 有可能是手机号,有可能是用户名:return: 返回user对象或None"""try:# Q查询  |:或; &:与; ~:非;user = User.objects.get(Q(username=account) | Q(mobile=account))except User.DoesNotExist as e:logger.error(f"No user found with account: {account}. Error: {e}")return Noneelse:# 这里返回的是 User 模型的一个实例(即一个用户对象),不是 User 模型类本身。return userclass UsernameModelAuthBackend(ModelBackend):# 重写 ModelBackend类下的 authenticate 方法def authenticate(self, request, username=None, password=None, **kwargs):# 获取useruser = get_user_by_account(account=username)# 判断前端传入的密码是否正确if user and user.check_password(password):logger.info(f'{user} ,authentication is successful ')# 返回userreturn user# 如果没有找到用户或密码不正确,返回 Nonelogger.warning("Authentication failed: either the user does not exist or the password is incorrect.")return None
修改setting.py
# setting.py""" 修改django认证后端类 """
# django认证的检查用户是username, 默认是 django.contrib.auth.backends.ModelBackend
# AUTHENTICATION_BACKENDS = ["django.contrib.auth.backends.ModelBackend"]
# 修改为自定义的用户验证类, 它也继承了 ModelBackend, 导包
AUTHENTICATION_BACKENDS = ['users.utils.UsernameModelAuthBackend']
http://www.lryc.cn/news/513900.html

相关文章:

  • 【AndroidAPP】权限被拒绝:[android.permission.READ_EXTERNAL_STORAGE],USB设备访问权限系统报错
  • SQL进阶技巧:如何分析连续签到领金币数问题?
  • 1、ELK的架构和安装
  • Vue2/Vue3使用DataV
  • 汇编环境搭建
  • Android 系统 `android.app.Fragment` 类的深度定制与常见问题解析
  • linux ueditor nginx https 后台配置项返回格式出错,上传功能将不能正常使用
  • 【机器学习 | 数据挖掘】时间序列算法
  • uniapp H5 对接 声网,截图
  • 家谱管理系统|Java|SSM|VUE| 前后端分离
  • 【LeetCode】200、岛屿数量
  • idea报错:There is not enough memory to perform the requested operation.
  • python ai ReAct 代理(ReAct Agent)
  • HTML入门教程|| HTML 基本标签(2)
  • MySQL root用户密码忘记怎么办(Reset root account password)
  • groovy:多线程 简单示例
  • SOME/IP 协议详解——序列化
  • 三、GIT与Github推送(上传)和克隆(下载)
  • 18.2、网络安全评测技术与攻击
  • 在 ArcGIS Pro/GeoScene Pro 中设计专题地图的符号系统
  • CSS2笔记
  • 移动端如何实现上拉加载
  • 【mysql】linux安装mysql客户端
  • YOLOv5部署到web端(flask+js简单易懂)
  • 【机器学习】深度学习(DNN)
  • 12.30-1-5学习周报
  • 【MySQL】数据操作
  • python数据分析:使用pandas库读取和编辑Excel表
  • 开源轻量级文件分享服务Go File本地Docker部署与远程访问
  • 异步背后的奥秘:事件循环