• Django(72)Django认证系统库--djoser


    djoser是什么?

      作用:Django认证系统的REST实现。djoser库提供了一组Django Rest Framework视图,用于处理注册、登录、注销、密码重置和帐户激活等基本操作。它适用于自定义用户模型。

      djoser并没有重写Django代码(例如PasswordResetForm),而是重新实现了一些东西,以更好地适应单页应用程序体系结构。
     

    环境准备与安装

    支持的python版本

    • Python 3.5
    • Python 3.6
    • Python 3.7
    • Python 3.8
       

    支持的Django版本

    • Django 1.11
    • Django 2.2
    • Django 3.1
       

    支持的drf版本

    • Django Rest Framework 3.9
    • Django Rest Framework 3.10
    • Django Rest Framework 3.11
       

    支持的身份验证后端

    • 基于drf的身份认证Token
    • 基于django-rest-framework-simplejwt的JWT认证
       

    可用端点

    • /users/
    • /users/me/
    • /users/confirm/
    • /users/resend_activation/
    • /users/set_password/
    • /users/reset_password/
    • /users/reset_password_confirm/
    • /users/set_username/
    • /users/reset_username/
    • /users/reset_username_confirm/
    • /token/login/ (Token Based Authentication)
    • /token/logout/ (Token Based Authentication)
    • /jwt/create/ (JSON Web Token Authentication)
    • /jwt/refresh/ (JSON Web Token Authentication)
    • /jwt/verify/ (JSON Web Token Authentication)
       

    安装

    pip install -U djoser
    

    如果你打算使用JWT认证,你还需要安装下面的包

    pip install -U djangorestframework_simplejwt
    

    最后,如果您打算使用基于第三方的身份验证,例如facebook,则需要安装社交身份验证应用程序django,其中包括:

    pip install -U social-auth-app-django
    

    配置信息

    INSTALLED_APPS里添加如下代码:

    INSTALLED_APPS = (
        'django.contrib.auth',
        (...),
        'rest_framework',
        'djoser',
        (...),
    )
    

    urls.py中添加如下代码

    urlpatterns = [
        (...),
        url(r'^auth/', include('djoser.urls')),
    ]
    

    官网上强调了:默认情况下,HTTP Basic Auth验证策略采用Django Rest Framework。并且强烈反对且不提供任何对basic auth的明确支持。我们应该按照“身份验证后端”中的说明来自定义身份验证后端。
     

    测试程序

    该库还提供了一个独立的测试应用程序,让我们了解基本的工作方式。在将djoser集成到后端应用程序之前,我们有必要去了解下

    接下来我们会模拟最简单的流程:注册用户、登录和注销。
     

    环境准备

    克隆git上的项目,并且在虚拟环境中安装djoser

    git clone git@github.com:sunscrapers/djoser.git
    

    克隆完项目的目录如下:

    安装项目中的依赖包(虚拟环境用的poetry)

    poetry install
    

    安装完成后,cd到testproject目录中,执行迁移命令

    python manage.py migrate
    

    最后直接通过pycharm启动项目,环境就算准备好了
     

    创建用户

    使用接口测试工具postman或者其他工具,输入url和data,就能访问接口了

    可以看到我们已经成功创建了一个id为2的用户
     

    未登录查询用户信息

    刚才我们只是创建了一个新用户,但是没有进行登录操作,此时我们去查用户信息,肯定是不行的

    正如我们所看到的,我们无法在不登录的情况下访问用户配置文件。
     

    用户登录

    我们访问用户登录接口,就可以返回一个token

     

    登录后查询用户信息

    然后我们在headers中添加Authorization,对应的值为Token 刚刚返回的token值,注意中间要有一个空格

    之后我们再访问查询用户信息接口,就能正确返回用户信息了

     

    退出登录

    最后访问退出登录接口,就可以退出登录了

     

    退出后再查询用户信息

    当我们退出登录后,再次用之前的token去查询用户信息后就会报错

     

    身份验证后端

    djoser有基于以下两种的认证方式

    • Token Based Authentication
    • JSON Web Token Authentication

    Token Based Authentication使用方式

    INSTALLED_APPS 中添加rest_framework.authtoken

    INSTALLED_APPS = [
        'django.contrib.auth',
        (...),
        'rest_framework',
        'rest_framework.authtoken',
        'djoser',
        (...),
    ]
    

    然后在urls.py配置路径

    urlpatterns = [
        url(r'^auth/', include('djoser.urls.authtoken')),
    ]
    

    再在settings.py中的REST_FRAMEWORK配置中添加rest_framework.authentication.TokenAuthentication

    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework.authentication.TokenAuthentication',
        ),
    }
    

    最后执行迁移命令,迁移authauthtoken apps:

    python manage.py migrate
    

    JSON Web Token Authentication

    settings.py中的REST_FRAMEWORK配置中添加rest_framework_simplejwt.authentication.JWTAuthentication

    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework_simplejwt.authentication.JWTAuthentication',
            (...)
        ),
    }
    

    然后配置django-rest-framework-simplejwt使用授权时的请求头中的请求标识,格式为:JWT <access_token>,配置信息如下:

    SIMPLE_JWT = {
       'AUTH_HEADER_TYPES': ('JWT',),
    }
    

    最后在urls.py配置路径

    urlpatterns = [
        (...),
        url(r'^auth/', include('djoser.urls')),
        url(r'^auth/', include('djoser.urls.jwt')),
    ]
    
  • 相关阅读:
    Java基础06 组合
    纸上谈兵: 树, 二叉树, 二叉搜索树
    Java基础05 实施接口
    纸上谈兵: 队列 (queue)
    纸上谈兵: 数学归纳法, 递归, 栈
    Java基础01 从HelloWorld到面向对象
    纸上谈兵: 表 (list)
    Java基础02 方法与数据成员
    纸上谈兵: 排序算法简介及其C实现
    纸上谈兵: 栈 (stack)
  • 原文地址:https://www.cnblogs.com/jiakecong/p/15469258.html
Copyright © 2020-2023  润新知