zoukankan      html  css  js  c++  java
  • DRF使用JWT进行用户认证

    1. 首先需要安装第三方依赖包

    pip install djangorestframework-jwt

    2. 在Django的settings文件中 配置全局的JWT认证类

    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework_jwt.authentication.JSONWebTokenAuthentication',  # jwt认证组件
            'rest_framework.authentication.SessionAuthentication',
            'rest_framework.authentication.BasicAuthentication',
        ),
    }
    
    import datetime
    JWT_AUTH = {
        'JWT_EXPIRATION_DELTA': datetime.timedelta(days=3),  # jwt中有效的时间
        'JWT_ALLOW_REFRESH': True,  # 是否允许用户获取新的token值
    }

    3. 实现登录接口

    from rest_framework_jwt.views import obtain_jwt_token
    
    urlpatterns = [
        path('login/', obtain_jwt_token),  # jwt版用户登录
    ]

    这个认证类是我们安装的第三方模块中提供的  它会帮助我们校验用户名和密码是否正确 如果正确的话 会给我们返回一个随机的token值

    4. 我们可以在需要登录以后才能访问的接口中 添加局部权限类 permission_classes

    class UserView(ModelViewSet):
        """ 用户管理 增删改查
        list: 用户列表
        create: 添加用户
        retrieve: 用户详细信息
        partial_update: 修改用户信息(可只传递要修改的字段/或全部传递也可以)
        locking_user: 锁定用户
        destroy: 删除用户
        """
        permission_classes = [IsAuthenticated, ]  # 需用户登录之后才可访问
        queryset = models.UserInfo.objects.filter(is_delete=False, is_active=True)
        serializer_class = TeacherRegisterModelSerializer
    
        def locking_user(self, request, pk):
            """ 锁定用户 锁定用户之后 该用户就无法登录了 """
            res = {
                "status": False,
                'msg': ""
            }
    
            user_obj = models.UserInfo.objects.filter(pk=pk).first()
            if not user_obj:
                res['msg'] = '没有该用户'
    
            user_obj.is_active = False
            user_obj.save()
    
            res['status'] = True
            res['msg'] = '锁定用户成功'
            return Response(res)

    5. 我们再次访问需要登录的接口时  在请求的Headers中添加一个名为Authorization的键  值为jwt token(token为登录成功后给我们返回的token值)

    这样就成功在DRF中使用JWT完成用户认证了 ~

  • 相关阅读:
    【面积并】 Atlantis
    【动态前k大 贪心】 Gone Fishing
    【复杂枚举】 library
    【双端队列bfs 网格图建图】拯救大兵瑞恩
    【奇偶传递关系 边带权】 奇偶游戏
    【权值并查集】 supermarket
    CF w4d3 A. Pythagorean Theorem II
    CF w4d2 C. Purification
    CF w4d2 B. Road Construction
    CF w4d2 A. Cakeminator
  • 原文地址:https://www.cnblogs.com/Gaohx/p/15075908.html
Copyright © 2011-2022 走看看