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')),
]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM