JWT進(jìn)行驗證
JWT默認(rèn)采用的是django的用戶系統(tǒng)
- jwt的安裝
pip3 install -i https://pypi.douban.com/simple/ djangorestframework-jwt #使用豆瓣鏡像源下載
-
在setting里面注冊
1.'rest_framework.authtoken',
2.路由path('api-token-auth/', obtain_jwt_token), # 使用post方法 在請求體里面?zhèn)魅雞sername和password
3.配置
import datetime JWT_AUTH = { 'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7), # Token 過期時間為一周 'JWT_AUTH_HEADER_PREFIX': 'JWT', # Token的頭為:JWT adashkjdhaskjhd21312312 'JWT_ALLOW_REFRESH':False, # 允許刷新嗎 'JWT_RESPONSE_PAYLOAD_HANDLER': 'app06.utils.jwt_response_payload_handler', # 規(guī)定jwt返回的數(shù)據(jù) }
4.自定義返回數(shù)據(jù)
1. 新建一個util的py文件
2.定義一個函數(shù) jwt_response_payload_handler
def jwt_response_payload_handler(token, user=None, request=None):
return {
'token': token,
'id': user.id,
'username': user.username,
}
JWT權(quán)限
新建一個permission的py文件
-
創(chuàng)建一個類繼承BasePermission
from rest_framework_jwt.authentication import jwt_decode_handler class MyAuthentication(BasePermission): def has_object_permission(self, request, view, obj): token = request.META.get('HTTP_AUTHORIZATION')[5:] user = jwt_decode_handler(token) if user: return user.id == obj.user.id return False
在view里面添加權(quán)限
from rest_framework.permissions import IsAuthenticated
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
# 在使用權(quán)限的時候必須要進(jìn)行驗證
authentication_classes = [
JSONWebTokenAuthentication
]
permission_classes = [
# MyPermission
IsAuthenticated,
MyAuthentication # 在使用權(quán)限的時候设捐,必須要進(jìn)行驗證
]