JWT验证 和权限

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权限

  1. 新建一个permission的py文件

  2. 创建一个类继承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
    
  3. 在view里面添加权限

    from rest_framework.permissions import IsAuthenticated
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
    # 在使用权限的时候必须要进行验证
    authentication_classes = [
        JSONWebTokenAuthentication
     ]   
    permission_classes = [
        # MyPermission
        IsAuthenticated,
        MyAuthentication  # 在使用权限的时候,必须要进行验证
    ]

发布了32 篇原创文章 · 获赞 2 · 访问量 238

猜你喜欢

转载自blog.csdn.net/qq_33759361/article/details/104811795