有些时候,我们需要将access_token作为参数传递,而不是携带请求头中

这个时候,我们可以先豁免将jwt验证,然后将参数中的token放到请求头中,

然后使用官方函数手动验证。

from rest_framework_simplejwt.authentication import JWTAuthentication
# 豁免验证
permission_classes = [AllowAny]

def parse(self, request, token):
authentication = JWTAuthentication()
request.META['HTTP_AUTHORIZATION'] = 'Bearer ' + token
user, token = authentication.authenticate(request)
return user

def get(self, request):
# 获取到get方法的参数
params = request.query_params
# id = request.user.id
# print(id)
if not params.get('token'):
return Response({'msg': 'token未传入', 'code': 403}, status=status.HTTP_403_FORBIDDEN)
else:
token = params.get('token')
# 为请求头添加token
user = self.parse(request, token)

# 利用jwt解析token函数进行登录验证并且得到用户id
if not user:
return Response({'msg': 'token无效', 'code': 403}, status=status.HTTP_403_FORBIDDEN)

parse

parse的主要作用便是在请求头中添加token并且进行验证,这也是整个流程的关键。

get

下面的get是drf中get请求处理函数,算是使用实例,无需在意。