美文网首页
Django-便捷的用户认证系统

Django-便捷的用户认证系统

作者: 越大大雨天 | 来源:发表于2019-05-26 16:43 被阅读0次

Django默认用户认证系统

  1. Django自带用户认证系统
  • 它处理用户账号、组、权限以及基于cookie的用户会话。
  1. Django认证系统位置
  • django.contrib.auth包含认证框架的核心和默认的模型。
  • django.contrib.contenttypes是Django内容类型系统,它允许权限与你创建的模型关联。
  1. Django认证系统同时处理认证和授权
  • 认证:验证一个用户是否它声称的那个人,可用于账号登录。
  • 授权:授权决定一个通过了认证的用户被允许做什么。
  1. Django认证系统包含的内容
  • 用户:用户模型类、用户认证。
  • 权限:标识一个用户是否可以做一个特定的任务,MIS系统常 用到。
  • 组:对多个具有相同权限的用户进行统一管理,MIS系统常用到。
  • 密码:一个可配置的密码哈希系统,设置密码、密码校验。

以上都是官方的介绍字段,比较枯燥,可先跳过。

它可以做什么?

1. 当需要创建用户注册models时,不再需要自己设计复杂表结构

案例:以如下注册页面为例,我们需要的数据库字段有用户名、密码、手机号


image.png
  • 使用Django自带的用户模型类,我们可以节省大量代码,实际定义代码如下:

    from django.db import models
    from django.contrib.auth.models import AbstractUser
    
    class User(AbstractUser):
        mobile = models.CharField(max_length=11)
    
    
  • 在settings中添加行AUTH_USER_MODEL = '应用名.模型类名'

    # 指定本项目用户模型类
    AUTH_USER_MODEL = 'users.User'  # 应用名称.模型类名称
    

这里只是继承了AbstractUser类,并只自定义了一个手机号的字段,而其他字段都不需再定义和设计,就完成了我们需要的模型。

  • 因为父类AbstractUser已经包含了username、password、email、first_name、last_name、last_login、date_joined、is_active 、is_staff、is_superuse这些字段,无需再次定义。
  • username、password为必选字段,其余可选。
  • 手机号字段Django中没有自带,需要我们继承AbstractUser并添加一条手机号字段即可。

2. 当需要在数据库中添加注册用户时,不再需要自己操作数据库语法
当用户通过注册验证后,创建用户对象只需执行下行代码:

user = User.objects.create_user(username=username, password=password, mobile=mobile)

3. 用户登录无需手动与数据库数据对比,无需对密码执行加密对比操作

from django.contrib.auth import authenticate
user = authenticate(username=username, password=password)

3.1 自定义authenticate方法实现多账号登录

实现能让用使用注册用户名、手机号或者邮箱完成登录验证:

在自定义工具目录util中继承ModelBackend类,重写authenticate方法

from django.contrib.auth.backends import ModelBackend
import re
from users.models import User

class MeiduoModelBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            # get方法查询到数据返回用户对象,未查询到则报错
            user = User.objects.get(username=username)
        except:
            try:
                user = User.objects.get(mobile=username)
            except:
                return None
        # 判断密码
        if user.check_password(password):
            return user
        else:
            return None

4. 保持用户登录状态无需手动创建session

from django.contrib.auth import login
login(request, user)

5.退出登录操作自动删除session

from django.contrib.auth import logout
logout(request)

迁移用户模型类

  • 用户认证系统中的用户模型类,是通过全局配置项AUTH_USER_MODEL 决定的。
  • 如果迁移自定义用户模型类,必须先配置 AUTH_USER_MODEL 。
  • 设置自定义模型类后,必须完成迁移.
    执行迁移命令:
    python manage.py makemigrations
    python manage.py migrate
    

迁移后,mysql数据库用户表结构如下:

image.png

相关文章

  • Django-便捷的用户认证系统

    Django默认用户认证系统 Django自带用户认证系统 它处理用户账号、组、权限以及基于cookie的用户会话...

  • Security基本认识

    1. 基本概念 1.1 什么是认证 认证:用户认证就是判断一个用户的身份是否合法的过程,用户去访问系统资源时系统要...

  • 用户认证&用户授权概念

    什么是用户身份认证? 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问。常见的用...

  • Identity and Access 身份认证

    SSO原理 SSO系统是单独部署的一套认证系统,独立于所有子系统,包含登录认证、授权、用户管理功能。用户需要登录任...

  • django-用户认证系统(注册,登录,校验,celery发送邮

    项目开发中视图处理一般流程:1.接收参数2.参数校验(后端校验)3.处理业务逻辑4.返回应答 为了将项目里面的文件...

  • Django权限系统auth模块详解

    认证系统auth auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理。au...

  • Shiro权限管理笔记

    一.用户身份认证 身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输...

  • Shiro授权和认证流程

    认证流程 认证过程: 身份认证,就是判断一个用户是否为合法用户的处理过程.醉常用的简单身份认证方式是系统通过核对用...

  • 向Asp.Net Core Identity迁移方案

    老系统向新技术迁移的一大障碍是用户认证系统。由于用户密码和认证方式的不同,我们经常无法将现有数据库中的用户数据完整...

  • 加盐加密

    背景 涉及身份验证的系统都需要存储用户的认证信息,常用的用户认证方式主要为用户名和密码的方式,为了安全起见,用户输...

网友评论

      本文标题:Django-便捷的用户认证系统

      本文链接:https://www.haomeiwen.com/subject/cvfftctx.html