dj-rest-auth

介绍

自从引入django-rest-framework,Django应用程序已能够提供应用程序级REST API入口。当时很多时候我们需要自行实现REST注册入口。dj-rest-auth旨在通过(一组用于处理用户注册和身份验证任务的REST API接口)来解决这一需求。通过具有这些API,客户端应用程序(例如AngularJS,iOS,Android等)可以通过用户管理的REST API独立地与Django后端站点进行通信。

特征

  • 激活用户注册

  • 登录/注销

  • 检索/更新Django用户模型

  • 密码变更

  • 通过电子邮件重置密码

  • 社交媒体认证

应用结构

  • dj_rest_auth 具有基本的身份验证功能,例如登录,注销,密码重置和密码更改

  • dj_rest_auth.registration 具有与注册和社交媒体身份验证相关的逻辑

安装

pip install dj-rest-auth

setting.py加入

INSTALLED_APPS = (
    ...,
    'rest_framework',
    'rest_framework.authtoken',
    ...,
    'dj_rest_auth'
)

url.py 加入

urlpatterns = [
    ...,
    url(r'^dj-rest-auth/', include('dj_rest_auth.urls'))
]

创建数据库

python manage.py migrate

默认注入的接口

^dj-rest-auth/password/reset/ [name='rest_password_reset']
^dj-rest-auth/password/reset/confirm/ [name='rest_password_reset_confirm']
^dj-rest-auth/login/ [name='rest_login']   # post  登陆
^dj-rest-auth/logout/ [name='rest_logout'] # post 登出
^dj-rest-auth/user/ [name='rest_user_details']
^dj-rest-auth/password/change/ [name='rest_password_change']

登陆测试

drf认证管理模块 dj-rest-auth_devops

查看用户信息

drf认证管理模块 dj-rest-auth_drf_02

如何使用注册模块

安装模块

pip install 'dj-rest-auth[with_social]'

setting.py添加

INSTALLED_APPS = (
    ...,
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'dj_rest_auth.registration',
)

SITE_ID = 1

url.py 添加 dj_rest_auth.registration 的链接

urlpatterns = [
    ...,
    url(r'^dj-rest-auth/', include('dj_rest_auth.urls')),
    url(r'^dj-rest-auth/registration/', include('dj_rest_auth.registration.urls'))
]

创建关联数据库

python manage.py migrate

测试效果

drf认证管理模块 dj-rest-auth_devops_03

JSON Web Token (JWT) 支持

默认情况下,dj-rest-auth使用Django的基于令牌的身份验证。如果要使用JWT身份验证,请按照下列步骤操作:

  1. 安装上面提过的模块 djangorestframework-simplejwt

  2. 将simple_jwt身份验证配置添加到身份验证类列表

REST_FRAMEWORK = {
    ...
    'DEFAULT_AUTHENTICATION_CLASSES': (
        ...
        'dj_rest_auth.jwt_auth.JWTCookieAuthentication',
    )
    ...
}


  1. 将以下配置值添加到您的设置文件,以在dj-rest-auth中启用JWT身份验证。

REST_USE_JWT = True
  1. 声明您要调用Cookie密钥的内容

JWT_AUTH_COOKIE = 'app-auth'

测试

利用postman进行测试,可以看到返回的json结构体包括access_token,refresh_token以及用户对象信息

drf认证管理模块 dj-rest-auth_dj-rest-auth_04

接着在header中加入下面Cooke信息,便可以请求

app-auth: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTk4OTI3MjYyLCJqdGkiOiIwYTliYzdjYWYwODM0NjY4YjQ3NDZhODliNzJkNDkyMCIsInVzZXJfaWQiOjF9.H2YHm1NISKA6PZnv_QCjXtQ_1WO8JQCy-6pmGCL9-Yw