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完成用户认证了 ~

  • 相关阅读:
    The model backing the 'XXX' context has changed 错误
    MVC5+EF6 入门完整教程四
    MVC5 + EF6 完整入门教程三
    MVC5 + EF6 入门完整教程二
    每日总结9.11
    setTextColor的几个注意事项
    selector使用注意事项
    每日总结9.9
    android popWindow使用注意事项
    有关TextView的drawaleTop属性
  • 原文地址:https://www.cnblogs.com/Gaohx/p/15075908.html
Copyright © 2011-2022 走看看