- JSON Web Token不再维护,故不使用。
- 官方建议的是使用simpleJWT认证
- 并且最新版本的Django和DRF如果使用JSON Web Token,项目启动会报错
ImportError: Could notimport'rest_framework_jwt.authentication.JSONWebTokenAuthentication'for API setting'DEFAULT_AUTHENTICATION_CLASSES'. ImportError: cannotimport name'smart_text' from'django.utils.encoding'
simpleJWT简单使用的步骤:
1、安装
pipinstall djangorestframework-simplejwt
2、配置
# settings.py
INSTALLED_APPS=[...'rest_framework',# add'rest_framework_simplejwt',# add]
REST_FRAMEWORK={'DEFAULT_PERMISSION_CLASSES':('rest_framework.permissions.IsAuthenticated',),'DEFAULT_AUTHENTICATION_CLASSES':('rest_framework_simplejwt.authentication.JWTAuthentication','rest_framework.authentication.SessionAuthentication','rest_framework.authentication.BasicAuthentication',),}
SIMPLE_JWT={# token有效时长(返回的 access 有效时长)'ACCESS_TOKEN_LIFETIME': datetime.timedelta(seconds=30),# token刷新的有效时间(返回的 refresh 有效时长)'REFRESH_TOKEN_LIFETIME': datetime.timedelta(seconds=20),}
3、配置路由
# urls.py
urlpatterns=[# 登录
path('login/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('verify/', TokenVerifyView.as_view(), name='token_verify'),]
4、验证
- 登录接口,返回refresh和access值
- refresh用来刷新获取新的Token值
- access用来请求身份认证的Token
- access的过期时间参照配置ACCESS_TOKEN_LIFETIME
- refresh的过期时间参照配置REFRESH_TOKEN_LIFETIME
- 当用refresh刷新后,access的过期时间等于【当前刷新的此刻时间+ACCESS_TOKEN_LIFETIME】
5、认证
# urls.py
urlpatterns=[...
path('test/', views.TestView.as_view()),]
# views.pyclassTestView(APIView):# permission_classes = []defget(self, request):print(request.user)return Response('test')
需要在请求头加上Authorization,格式:Bearer [token值] 有空格