測試開發基礎,教你做一個完整功能的Web平臺之登入認證
回顧
在上篇文章《手把手教你做測開:開發Web平臺之環境準備》中,我們做了以下幾件事情: 加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群~~
1. 搭建了前後端專案工程
2. 安裝了前後端的依賴
3. 配置並啟動了前後端服務
4. 建立了後端子應用
5. 將Rest Framework和資料庫連線資訊配置進後端的配置檔案中
也許你已經蠢蠢欲動準備寫程式碼了,看到這裡恭喜你,我們馬上進入程式碼環節。在這篇文章中,我們將完成以下功能的實戰:
1. 後端登入認證的實現
2. 前後端服務關聯配置
3. 前端登入邏輯的梳理
4. 前端登入邏輯的修改
5. 跨域問題的解決
後端登入認證的實現
說到Web端的認證機制,作為測試人員,我們能想到的是cookie、session、token。那麼Django中也為我們提供了一些jwt(Json Web Token)認證的方式。
有djangorestframework-jwt、djangorestframework-simplejwt等依賴庫,由於前者已經不維護了,我們本次使用後者(官方文件:)。
jwt安裝與配置
可以使用pip install djangorestframework-simplejwt來安裝,但我們之前已經安裝過了。
在後端配置檔案settings.py中配置。這裡需要注意,simplejwt為我們提供了兩個token,一個是access token,一個是refresh token。
ACCESSTOKENLIFETIME是access token的過期時間,配置為5分鐘,REFRESHTOKENLIFETIME是refresh token的過期時間,預設為1天。
當access token失效時,refresh token會自動獲取一個新的access token,使得使用者保持在登入態,直到refresh toke過期,使用者再做重新登入。否則access token一旦失效,使用者就要重新登入體驗會比較差。
from datetime import timedelta
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
}
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'ROTATE_REFRESH_TOKENS': False,
'BLACKLIST_AFTER_ROTATION': False,
'UPDATE_LAST_LOGIN': False,
'ALGORITHM': 'HS256',
'SIGNING_KEY': SECRET_KEY,
'VERIFYING_KEY': None,
'AUDIENCE': None,
'ISSUER': None,
'JWK_URL': None,
'LEEWAY': 0,
'AUTH_HEADER_TYPES': ('Bearer',),
'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
'USER_ID_FIELD': 'id',
'USER_ID_CLAIM': 'user_id'
}
(二). user_auth序列化器
1.我們從simplejwt的官網可以看到,它為我們提供了一些自定義token的方法。
2.為什麼我們要自定義返回token?因為如果直接使用,我們可能得到的登入返回結果是類似這樣的:
data: {
'access': 'xxxxxxxx',
'refresh': 'xxxxxxx' }
3.一個登入請求的響應結果,我們肯定希望有code、message,包括user_id,因此我們需要在userauth子應用下建立一個序列化器檔案serializer.py。
4.在這個檔案中,我們建立了一個MyTokenObtainPairSerializer類,這個類繼承了TokenObtainPairSerializer類,然後重寫了父類的gettoken和validate方法。我們給校驗後的返回資料加上了code、message、user_id等欄位。
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)
return token
def validate(self, attrs):
data = super().validate(attrs)
re_data = {'data': data, 'code': 200, 'message': 'success', 'user_id': self.user.id}
return re_data
(三). user檢視
1.在user_auth子應用下的views.py中定義一個MyTokenObtainPairView的檢視類,它繼承了TokenObtainPairView,指定它的序列化器為我們自定義的序列化器MyTokenObtainPairSerializer。
from rest_framework_simplejwt.views import TokenObtainPairView
from .serializer import MyTokenObtainPairSerializer
class MyTokenObtainPairView(TokenObtainPairView):
serializer_class = MyTokenObtainPairSerializer
2.請求方法不需要自己定義,MyTokenObtainPairView的父類的父類 TokenViewBase中定義了一個post方法,這個是最終返回給我們登入後的token及其他資訊的介面。
(四). user路由
1.序列化器、檢視類都定義完成後,下一步需要看看路由,記得在上篇文章中,我們在user_auth子應用下新建了一個urls.py檔案,這個檔案裡就用來存放子應用的路由資訊。
將子路由的訪問路徑設定為 user/login。
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import MyTokenObtainPairView
router = DefaultRouter()
urlpatterns = [
path('', include(router.urls)), path('user/login', MyTokenObtainPairView.as_view(), name='token_obtain_pair'), ]
2.子應用的路由設定好後,需要去父路由backend/urls.py中設定子路由的資訊。這樣最終的一個訪問路徑將是:。
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls), path('', include('user_auth.urls'))
]
(五). user資料表遷移
1.很多人看到這裡不禁要問,User模型類是不是還沒定義。事實上,django為我們自帶了User模型類,它的路徑是django.contrib.auth.models.User,因此需要對自帶的User模型類做資料遷移。
最後:
可以到我的個人V:atstudy-js,可以免費領取一份10G軟體測試工程師面試寶典文件資料。以及相對應的視訊學習教程免費分享!其中包括了有基礎知識、Linux必備、Mysql資料庫、抓包工具、介面測試工具、測試進階-Python程式設計、Web自動化測試、APP自動化測試、介面自動化測試、測試高階持續整合、測試架構開發測試框架、效能測試等。
這些測試資料,對於做【軟體測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2905413/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 測試開發基礎,教你做一個完整功能的Web平臺之環境準備Web
- 手把手教你做測開:開發Web平臺之使用者資訊Web
- ABAP Netweaver, Hybris Commerce和SAP 雲平臺的登入認證
- 深入Vue後臺管理開發之登入驗證Vue
- Web快速開發平臺個人之淺見Web
- 網站安全滲透測試檢測認證登入分析網站
- 移動 APP 測試之基礎功能測試流程APP
- 一篇文章入門django開發 (測試平臺)Django
- 快速開始api開發(四)登入與認證API
- 基於gin的golang web開發:認證利器jwtGolangWebJWT
- Web快速開發平臺,基於二次開發平臺Web
- 直播平臺軟體開發,一個簡單的Android登入實現demoAndroid
- 手把手教你基於 JMeter 開發一個自動化測試平臺 (2)JMeter
- 手把手教你基於 JMeter 開發一個自動化測試平臺 (1)JMeter
- 基於 RF 的 WEB 版自動管理測試平臺Web
- 認證系統之登入認證系統的進階使用 (二)
- 粗淺設計一個登入平臺
- 測試平臺之介面測試
- 直播平臺軟體開發,前端實現登入拼圖驗證前端
- Mx Suite — ISO 26262 認證的嵌入式軟體一體化測試平臺UI
- “登入”功能有哪些測試點?1000個登入頁面問題分析!
- Web測試基礎-Html基礎知識WebHTML
- 測試平臺開發(二) 高逼格登入頁面
- WordPress站點快速整合騰訊數字身份管控平臺CIAM,免開發實現登入認證
- 新潮測試平臺之效能測試
- 基於thinkphp3.2 開發的一個教育平臺PHP
- 直播平臺開發,基礎搜尋方式之拼音搜尋
- 求一個開源的自動化測試平臺 最好是 vue+python 開發的VuePython
- 實現基於JWT的Token登入驗證功能JWT
- Flutter開始干係列-一個完整的登入實踐Flutter
- 測試平臺開發教程【提測平臺】階段總結(三)
- BookStack:一個開源的維基平臺
- java B2B2C Springboot電子商務平臺原始碼-SSO單點登入之OAuth2.0登入認證JavaSpring Boot原始碼OAuth
- 軟體測試之登入測試詳解
- 線上教育平臺開發中,課堂測試功能是如何實現的
- 訂單交易平臺三(登入介面整個實現過程)階段一(只實現簡單的登入功能)
- 力軟快速開發平臺:方便快捷的Web開發平臺Web
- Sealos Devbox 基礎教程:使用 Cursor 從零開發一個完整的專案dev