DRF使用JWT進行使用者認證
阿新 • • 發佈:2021-07-29
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完成使用者認證了 ~