zoukankan      html  css  js  c++  java
  • 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')),
    ]
    
  • 相关阅读:
    基于Metaweblog API 接口一键发布到国内外主流博客平台
    uva144 Student Grants
    Uva 10452
    Uva 439 Knight Moves
    Uva 352 The Seasonal War
    switch语句
    java——基础知识
    我的lua学习2
    codeforces 431 D. Random Task 组合数学
    codeforces 285 D. Permutation Sum 状压 dfs打表
  • 原文地址:https://www.cnblogs.com/jiakecong/p/15469258.html
Copyright © 2011-2022 走看看