1. 首先需要安裝第三方依賴包
pip install djangorestframework-jwt
2. 在Django的settings檔案中 配置全域性的JWT認證類
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication', # jwt認證元件
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
} import datetime
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=3), # jwt中有效的時間
'JWT_ALLOW_REFRESH': True, # 是否允許使用者獲取新的token值
}
3. 實現登入介面
from rest_framework_jwt.views import obtain_jwt_token urlpatterns = [
path('login/', obtain_jwt_token), # jwt版使用者登入
]
這個認證類是我們安裝的第三方模組中提供的 它會幫助我們校驗使用者名稱和密碼是否正確 如果正確的話 會給我們返回一個隨機的token值
4. 我們可以在需要登入以後才能訪問的介面中 新增區域性許可權類 permission_classes
class UserView(ModelViewSet):
""" 使用者管理 增刪改查
list: 使用者列表
create: 新增使用者
retrieve: 使用者詳細資訊
partial_update: 修改使用者資訊(可只傳遞要修改的欄位/或全部傳遞也可以)
locking_user: 鎖定使用者
destroy: 刪除使用者
"""
permission_classes = [IsAuthenticated, ] # 需使用者登入之後才可訪問
queryset = models.UserInfo.objects.filter(is_delete=False, is_active=True)
serializer_class = TeacherRegisterModelSerializer def locking_user(self, request, pk):
""" 鎖定使用者 鎖定使用者之後 該使用者就無法登入了 """
res = {
"status": False,
'msg': ""
} user_obj = models.UserInfo.objects.filter(pk=pk).first()
if not user_obj:
res['msg'] = '沒有該使用者' user_obj.is_active = False
user_obj.save() res['status'] = True
res['msg'] = '鎖定使用者成功'
return Response(res)
5. 我們再次訪問需要登入的介面時 在請求的Headers中新增一個名為Authorization的鍵 值為jwt token(token為登入成功後給我們返回的token值)
這樣就成功在DRF中使用JWT完成使用者認證了 ~