1. 程式人生 > 其它 >DRF使用JWT進行使用者認證

DRF使用JWT進行使用者認證

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完成使用者認證了 ~