rest-framework-jwd的认证

关于jwt的认识可以自行百度下,现在django中要使用jwt,传送门

一、rest_framework官方自带的认证请参考第一小节

二、关于使用第三方的认证方式

  • 1、github上搜索相关的推荐使用

  • 2、安装

      pip3 install djangorestframework-jwt
    
  • 2、在setting.py中配置

      # REST_FRAMEWORK的配置
      REST_FRAMEWORK = {
          ...
          # 配置jwt
          'DEFAULT_AUTHENTICATION_CLASSES': (
              'rest_framework.authentication.BasicAuthentication',
              'rest_framework.authentication.SessionAuthentication',
              'rest_framework_jwt.authentication.JSONWebTokenAuthentication'
          ),
      }
    
  • 3、配置url

      from rest_framework_jwt.views import obtain_jwt_token
      urlpatterns = [
        path('token/', upload.QiNiuToken.as_view(), name='token'),
        ...
        # 配置jwt的认证方式来登陆
        path('login/', obtain_jwt_token),
        ...
      ]
    
  • 4、测试localhost:8000/login/(输入用户名和密码模拟登陆,用postman使用post请求)

    模拟登陆

  • 5、在别的接口中请求把返回的token加到header里面去

      key:Authorization
      value:JWT <your_token>
    
      **在vue中尝试使用token请求数据**
      ...
      getData(){
        let header = {headers: {'Authorization':'JWT eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTE0MDI3MTg2LCJlbWFpbCI6IjMzMjkwNDIzNEBxcS5jb20ifQ.3u1j15ce5gZ_tUxjGHiL4XuY7CdG_i_EeFuQVhMiXKA'}};
        axios.get('http://localhost:8000/goods3/',header).then(result => {
          console.log('result', result);
        })
      }
      ...
    
  • 6、注意直接这样访问会报401错误

    • JSONWebToken可能过期
    • 不是每个接口都需要校验的,但是前端会全局配置的
  • 7、就需要后端在视图层配置(在需要的视图中使用)

    • setting.py中注释一行代码

       # REST_FRAMEWORK的配置
       REST_FRAMEWORK = {
           ...
           # 配置jwt
           'DEFAULT_AUTHENTICATION_CLASSES': (
               'rest_framework.authentication.BasicAuthentication',
               'rest_framework.authentication.SessionAuthentication',
               # 转移到视图文件中配置
               # 'rest_framework_jwt.authentication.JSONWebTokenAuthentication'
           ),
       }
      
    • 2、视图类中配置

        from rest_framework_jwt.authentication import JSONWebTokenAuthentication
      
        class GoodListViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet):
            queryset = Goods.objects.all()
            serializer_class = GoodsSerializersModel
            # 使用过滤器
            filter_backends = (filters.OrderingFilter,)
            # 单独定义
            authentication_classes = (JSONWebTokenAuthentication,)
            ordering_fields = ('add_time','goods_num')
      
  • 8、测试

二、配置过期时间

  • 1、设置过期时间

      **settings.py文件中**
      import datetime
      JWT_AUTH = {
          'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
          'JWT_AUTH_HEADER_PREFIX': 'JWT',
      }
    

三、项目中使用

  • 1、直接使用jwt的认证方式进行用户登陆
  • 2、根据上一小节的方式配置用户多种登陆方式

results matching ""

    No results matching ""