drf JWT认证模块与自定制 (5)

   验证的时候,继承BaseAuthentication类,重写一下验证方法:

# app_auth.py from users.models import User class MyJSONWebTokenAuthentication(BaseAuthentication): def authenticate(self, request): jwt_value = get_authorization_header(request) if not jwt_value: raise AuthenticationFailed('Authorization 字段是必须的') try: payload = jwt_decode_handler(jwt_value) except jwt.ExpiredSignature: raise AuthenticationFailed('签名过期') except jwt.InvalidTokenError: raise AuthenticationFailed('非法用户') username = jwt_get_username_from_payload(payload) print(username) user = User.objects.filter(username=username).first() print(user) return user, jwt_value

   然后你的某一个视图必须登录后才可以访问,把他添加到认证中就OK了。

from users.app_auth import JSONWebTokenAuthentication,MyJSONWebTokenAuthentication class OrderView(APIView): # authentication_classes = [JSONWebTokenAuthentication] # 不用默认的了,用我们自己的 authentication_classes = [MyJSONWebTokenAuthentication] # 由于不是auth_user表,所以不需要判断是否为匿名用户。 def get(self,request): print(request.user) return CommonResponse('100', '成功',{'数据':'测试'}) 最后我想说

  1.注意前缀,JWT开头,一个空格,后面是JWT的token字符串

  2.如果你不用auth组件,则需要手动生成JWT的token字符串与手动进行校验。这很麻烦,所幸JWT这个模块给我们很多方便之处。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxyyp.html