广告
返回顶部
首页 > 资讯 > 后端开发 > Python >DjangoAuth应用实现用户身份认证
  • 164
分享到

DjangoAuth应用实现用户身份认证

2024-04-02 19:04:59 164人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 实现用户的认证用户认证过程解析Django获取后端认证2. Auth应用获取用户模型我们知道 DjanGo Auth 应用一般用在用户的登录注册上,用于判断当前的用户是否合

我们知道 DjanGo Auth 应用一般用在用户的登录注册上,用于判断当前的用户是否合法,从而可以帮助开发者快速的构建用户系统,那么 Auth 应用又是如何是实现用户的认证的呢?当给定相关的条件或属性时候,我们可以去获取用户对象这个过程就被称为用户认证,Django Auth 应用提供了一个用来认证的方法即 authenticate 方法用来实现用户的认证行为。下面就让我们一起来认识一下吧!

1. 实现用户的认证

authenticate 方法一般接受 username 与 passWord 作为参数,如果通过了认证,就返回认证的实例对象,否则就会返回 None,下面我们进行一下相关的实例演示:

In [1]: from django.contrib.auth import authenticate

In [2]: user=authenticate(username="bookstore",password="python_django")

In [3]: user

Out[3]: <User: bookstore>

In [4]: user=authenticate(username="bookstore",password="Python")

In [5]: user is None

Out[5]: True

用户认证过程解析

上述代码中,我们首先引入 authenticate ,可知该方法定义在 django/contrib/auth/__init__.py 文件中,然后我们对上一节中创建的 user 用户进行可认证,输入它的两个参数值,最后验证通过返回了 user 的实例对象,最后我们更改了密码的参数值将其设置为不正确,并使用 user is None 的方法查看其返回结果是否为 None,得到的布尔值为 Ture,所以用户认证失败。这就是用户认证的的过程。

那么 authenticate 方法是如何实现的呢?我们分析一下它的源码


def authenticate(request=None, **credentials):
    #__get_backends获取当前系统中定义的认证后端,并依次迭代
    for backend, backend_path in _get_backends(return_tuples=True):
        try:
            inspect.getcallargs(backend.authenticate, request, **credentials)
        except TypeError:
            #此后端不接受这些凭据作为参数。返回继续执行循环
            continue
        try:
             #通过当前的认证后端尝试获取 User,若获取不到就会抛出异常!
            user = backend.authenticate(request, **credentials)
        except PermissionDenied:
            #抛出异常Permission
            break
         #如果没有返回,继续执行下一个认证
        if user is None:
            continue
        #添加一个属性标志,代表后端认证成功
        user.backend = backend_path
        return user
    # 所提供的凭据对所有后端、触发信号无效
    user_login_failed.send(sender=__name__, credentials=_clean_credentials(credentials), request=request)

Django获取后端认证

上述代码中,我们可以看出,authenticate 方法使用了当前系统中定义的认证后端来获取用户对象,当前系统的默认认证后端是 ModelBackend。那么 Django 是如何获取认证后端的呢?如下所示:


def _get_backends(return_tuples=False):
    backends = []
    #AUTHENTICATION_BACKENDS 定义了当前系统可以用的身份认证列表
    for backend_path in settings.AUTHENTICATION_BACKENDS:
        #加载后端
        backend = load_backend(backend_path)
        backends.append((backend, backend_path) if return_tuples else backend)
    #如果未定义后端列表抛出异常
    if not backends:
        raise ImproperlyConfigured(
            'No authentication backends have been defined. Does '
            'AUTHENTICATION_BACKENDS contain anything?'
        )
    return backends

但是我们并没有对 AUTHENTICATION_BACKENDS 进行定义,所以这里会使用户 Django 框架默认的后端认认证,它位于 django/conf/global_settings.py 文件中,如下所示:


AUTHENTICATION_BACKENDS=['django.contib.auth.backends.ModelBackend']  #当前系统默认认证后端ModelBackend

AUTHENTICATION_BACKENDS=['django.contib.auth.backends.ModelBackend']  #当前系统默认认证后端ModelBackend

2. Auth应用获取用户模型

get_user_model 用于获取当前系统定义的“用户模型”。其源代码如下所示:


def get_user_model():
    """
    返回一个处于激活状态的 User
    """
    try:
        return django_apps.get_model(settings.AUTH_USER_MODEL, require_ready=False)
    except ValueError:
        raise ImproperlyConfigured("AUTH_USER_MODEL must be of the fORM 'app_label.model_name'")
    except LookupError:
        raise ImproperlyConfigured(
            "AUTH_USER_MODEL refers to model '%s' that has not been installed" % settings.AUTH_USER_MODEL
        )

get_user_model 使用实例如下所示:


# 使用默认User model时
>>> from django.contrib.auth import get_user_model
>>> get_user_model()
<class 'django.contrib.auth.models.User'>
# 使用自定义User model时
>>> from django.contrib.auth import get_user_model
>>> get_user_model()
<class 'xxx.models.NewUser'>
# get_user_model()实际获取的是settings.AUTH_USER_MODEL指定的User model

Django 允许在 settings.py 文件中定义 AUTH_USER_MODEL 覆盖默认的 auth.User,以满足特定项目的需求。所以,ModelBacakend 的 authenticate 方法首先会通过 username 尝试获取 User 对象,再去校验密码是否正确以及 is_active 的状态,最后返回 User 对象或是返回 None。在  settings.py 配置 AUTH_USER_MODEL 格式如下所示:


#格式: "<django_app名>.<model名>"
AUTH_USER_MODEL = "appname.NewUser" 
#在models.py编写示例
from django.conf import settings
from django.db import models
class Article(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL)
    title = models.CharField(max_length=100)

在 django/contrib/auth/__init__.py 文件中定义了用户的各种行为,例如,登录、退出、用户的认证等等,通过这些可见 Django 的强大所在,Auth 应用模块可以帮助开发者减少很多的工作量,而且 Auth 应用的源码可以给开发者提供诸多的用户系统重写思路。 

到此这篇关于Django Auth应用实现用户身份认证的文章就介绍到这了,更多相关Django Auth应用内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: DjangoAuth应用实现用户身份认证

本文链接: https://www.lsjlt.com/news/159071.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • DjangoAuth应用实现用户身份认证
    目录1. 实现用户的认证用户认证过程解析Django获取后端认证2. Auth应用获取用户模型我们知道 Django Auth 应用一般用在用户的登录注册上,用于判断当前的用户是否合...
    99+
    2022-11-12
  • node.js怎么实现身份认证
    这篇文章主要介绍“node.js怎么实现身份认证”,在日常操作中,相信很多人在node.js怎么实现身份认证问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”node.js怎么实现身份认证”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • AngularJS如何实现用户访问身份认证和表单验证功能
    今天小编给大家分享一下AngularJS如何实现用户访问身份认证和表单验证功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2023-07-04
  • 在Weblogic环境下的servlet中实现应用级身份认证
    在weblogic中利用应用服务器本身的配置,可以比较全面的实现用户认证。由于我们主要是面向开发,这里主要讲解在servlet中使用用户角色规则(也就是我们常说的http用户认证,下面还是使用这个我们熟悉的名词吧)。Weblogic用户认证...
    99+
    2023-06-03
  • 启用skywalking身份安全认证
    目录 1.  Nginx部署 1.1更新系统软件包 1.2安装EPEL存储库 1.3安装Nginx 2.  修改 Nginx 配置文件 2.1.     字段解释 3. 创建存储用户名和密码的文件 3.1 安装htpasswd工具 3.2...
    99+
    2023-09-06
    nginx 运维 服务器
  • ASP.NET中怎么实现Windows身份认证
    这篇文章给大家介绍ASP.NET中怎么实现Windows身份认证,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。要使用Windows身份认证模式,需要在web.config设置:<authentication&nb...
    99+
    2023-06-17
  • Node.js express中的身份认证的实现
    目录Web开发模式身份认证Session认证机制在Express中使用Session认证JWT认证机制在Express中使用JWTWeb开发模式 目前主流的Web开发模式有两种: 基...
    99+
    2023-01-12
    Node.js express 身份认证 express 身份认证
  • Asp.Net Core 中怎么利用Cookie实现身份认证
    这篇文章将为大家详细讲解有关Asp.Net Core 中怎么利用Cookie实现身份认证,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一 注册Cookie认...
    99+
    2022-10-19
  • 安装vsftpd+pam+mysql实现对虚拟用户身份认证详细步骤
    下文主要给大家带来安装vsftpd+pam+mysql实现对虚拟用户身份认证详细步骤,希望这些内容能够带给大家实际用处,这也是我编辑安装vsftpd+pam+mysql实现对虚拟用户身份认证详细步骤这篇文章...
    99+
    2022-10-18
  • 使用vue怎么实现身份认证管理和租户管理功能
    本篇文章为大家展示了使用vue怎么实现身份认证管理和租户管理功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。按钮级权限src\utils\abp.js:export function&n...
    99+
    2023-06-15
  • node.js实现身份认证的示例代码
    请问昨天结束的早是对堆积在了今天吗,今天还来加个班更博,看在这个毅力的份上能否给亿点点推荐。 有个好消息有个坏消息,先说坏消息吧,就是在这么学下去我急需急支糖浆,来回顾回顾前面的知识...
    99+
    2022-11-13
  • laravel 中如何使用二维码实现身份认证?
    Laravel 中如何使用二维码实现身份认证? 二维码在现代社会已经普及,它不仅仅是一种方便的扫描方式,也成为了一种重要的安全认证方式。在 Laravel 中,我们可以使用二维码实现身份认证,提高系统的安全性。本文将介绍如何使用 Larav...
    99+
    2023-10-25
    二维码 laravel 面试
  • Express实现Session身份认证的示例代码
    目录CookieHTTPCookieSessionSession VS CookieExpress 实现 Session 身份认证获取配置登录主页退出登录代码总汇Cookie HTT...
    99+
    2023-01-31
    Express Session身份认证 Express 身份认证
  • Django Rest Framework实现身份认证源码详解
    目录一.Django框架二.身份认证的两种实现方式:三.身份认证源码解析流程一.Django框架 Django确实是一个很强大,用起来很爽的一个框架,在Rest Framework中...
    99+
    2022-11-11
  • Flask中基于Token的身份认证的实现
    Flask提供了多种身份认证方式,其中基于Token的身份认证是其中一种常用方式。基于Token的身份认证通常是在用户登录之后,为用户生成一个Token,然后在每次请求时用户将该To...
    99+
    2023-02-20
    Flask Token身份认证 flask token认证
  • VB.NET如何验证LDAP用户身份
    这篇文章主要为大家展示了“VB.NET如何验证LDAP用户身份”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VB.NET如何验证LDAP用户身份”这篇文章吧。首先,我要讲的LDAP不是微软的Ac...
    99+
    2023-06-17
  • 深入解读ASP.NET Core身份认证过程实现
    长话短说:上文我们讲了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证。 身份验证是确定用户身份的过...
    99+
    2022-06-07
    ASP.NET net core ASP
  • k8s实现身份认证策略及过程解析
    目录身份认证策略API Server启用的身份认证机制kubelet启用的身份认证机制X.509数字证书认证静态令牌文件Service Account令牌OpenID Connect...
    99+
    2023-02-13
    k8s 身份认证策略 k8s 身份认证
  • Flask中基于Token的身份认证如何实现
    今天小编给大家分享一下Flask中基于Token的身份认证如何实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Flask提...
    99+
    2023-07-05
  • Node中express的身份认证怎么使用
    今天小编给大家分享一下Node中express的身份认证怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Web开发模式...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作