Django之JWT库与SimpleJWT库的使用
在Django中使用JWT(JSON Web Tokens),可以选择djangorestframework-simplejwt
库,这是一个基于PyJWT
的库,专门用于Django REST框架中提供Token认证服务。
首先,需要安装这个库:
pip install djangorestframework-simplejwt
然后,在Django的settings.py
文件中配置:
# settings.py
# Simple JWT
import datetime
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': datetime.timedelta(minutes=5),
'REFRESH_TOKEN_LIFETIME': datetime.timedelta(days=1),
'ROTATE_REFRESH_TOKENS': False,
'BLACKLIST_AFTER_ROTATION': True,
'ALGORITHM': 'HS256',
'SIGNING_KEY': SECRET_KEY,
'VERIFYING_KEY': None,
'AUTH_HEADER_TYPES': ('Bearer',),
'USER_ID_FIELD': 'id',
'USER_ID_CLAIM': 'user_id',
'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
'TOKEN_TYPE_CLAIM': 'token_type',
'JTI_CLAIM': 'jti',
'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
'SLIDING_TOKEN_LIFETIME': datetime.timedelta(minutes=5),
'SLIDING_TOKEN_REFRESH_LIFETIME': datetime.timedelta(days=1),
}
接下来,在urls.py
中添加Token的路由:
# urls.py
from django.urls import path, include
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)
urlpatterns = [
# ...
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
最后,在需要认证的视图中使用jwt_required
装饰器:
# views.py
from rest_framework_simplejwt.decorators import jwt_required
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import status
@jwt_required
def get_current_user(request):
user = request.user
return Response({'email': user.email, 'id': user.id}, status=status.HTTP_200_OK)
使用TokenObtainPairView.as_view()
和TokenRefreshView.as_view()
可以提供登录和刷新Token的接口。使用jwt_required
装饰器可以保护视图,要求请求提供有效的Token。
评论已关闭