JWT进行验证
JWT默认采用的是django的用户系统
- 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方法 在请求体里面传入username和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', # 规定jwt返回的数据 }
4.自定义返回数据
1. 新建一个util的py文件
2.定义一个函数 jwt_response_payload_handler
def jwt_response_payload_handler(token, user=None, request=None):
return {
'token': token,
'id': user.id,
'username': user.username,
}
JWT权限
新建一个permission的py文件
-
创建一个类继承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里面添加权限
from rest_framework.permissions import IsAuthenticated
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
# 在使用权限的时候必须要进行验证
authentication_classes = [
JSONWebTokenAuthentication
]
permission_classes = [
# MyPermission
IsAuthenticated,
MyAuthentication # 在使用权限的时候,必须要进行验证
]