前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django(72)Django认证系统库–djoser「建议收藏」

Django(72)Django认证系统库–djoser「建议收藏」

作者头像
全栈程序员站长
发布2022-09-19 16:23:01
1.9K0
发布2022-09-19 16:23:01
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

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)

安装

代码语言:javascript
复制
pip install -U djoser

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

代码语言:javascript
复制
pip install -U djangorestframework_simplejwt

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

代码语言:javascript
复制
pip install -U social-auth-app-django

配置信息

INSTALLED_APPS里添加如下代码:

代码语言:javascript
复制
INSTALLED_APPS = (
    'django.contrib.auth',
    (...),
    'rest_framework',
    'djoser',
    (...),
)

urls.py中添加如下代码

代码语言:javascript
复制
urlpatterns = [
    (...),
    url(r'^auth/', include('djoser.urls')),
]

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

测试程序

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

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

环境准备

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

代码语言:javascript
复制
git clone git@github.com:sunscrapers/djoser.git

克隆完项目的目录如下:

Django(72)Django认证系统库--djoser「建议收藏」
Django(72)Django认证系统库--djoser「建议收藏」

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

代码语言:javascript
复制
poetry install

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

代码语言:javascript
复制
python manage.py migrate

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

创建用户

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

Django(72)Django认证系统库--djoser「建议收藏」
Django(72)Django认证系统库--djoser「建议收藏」

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

未登录查询用户信息

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

Django(72)Django认证系统库--djoser「建议收藏」
Django(72)Django认证系统库--djoser「建议收藏」

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

用户登录

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

Django(72)Django认证系统库--djoser「建议收藏」
Django(72)Django认证系统库--djoser「建议收藏」

登录后查询用户信息

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

Django(72)Django认证系统库--djoser「建议收藏」
Django(72)Django认证系统库--djoser「建议收藏」

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

Django(72)Django认证系统库--djoser「建议收藏」
Django(72)Django认证系统库--djoser「建议收藏」

退出登录

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

Django(72)Django认证系统库--djoser「建议收藏」
Django(72)Django认证系统库--djoser「建议收藏」

退出后再查询用户信息

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

Django(72)Django认证系统库--djoser「建议收藏」
Django(72)Django认证系统库--djoser「建议收藏」

身份验证后端

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

  • Token Based Authentication
  • JSON Web Token Authentication

Token Based Authentication使用方式

INSTALLED_APPS 中添加rest_framework.authtoken

代码语言:javascript
复制
INSTALLED_APPS = [
    'django.contrib.auth',
    (...),
    'rest_framework',
    'rest_framework.authtoken',
    'djoser',
    (...),
]

然后在urls.py配置路径

代码语言:javascript
复制
urlpatterns = [
    url(r'^auth/', include('djoser.urls.authtoken')),
]

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

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
    ),
}

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

代码语言:javascript
复制
python manage.py migrate

JSON Web Token Authentication

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

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        (...)
    ),
}

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

代码语言:javascript
复制
SIMPLE_JWT = {
   'AUTH_HEADER_TYPES': ('JWT',),
}

最后在urls.py配置路径

代码语言:javascript
复制
urlpatterns = [
    (...),
    url(r'^auth/', include('djoser.urls')),
    url(r'^auth/', include('djoser.urls.jwt')),
]

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/164824.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • djoser是什么?
  • 环境准备与安装
    • 支持的python版本
      • 支持的Django版本
        • 支持的drf版本
          • 支持的身份验证后端
            • 可用端点
              • 安装
                • 配置信息
                • 测试程序
                  • 环境准备
                    • 创建用户
                      • 未登录查询用户信息
                        • 用户登录
                          • 登录后查询用户信息
                            • 退出登录
                              • 退出后再查询用户信息
                              • 身份验证后端
                                • Token Based Authentication使用方式
                                  • JSON Web Token Authentication
                                  相关产品与服务
                                  多因子身份认证
                                  多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档