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

原文地址:https://www.cnblogs.com/Gaohx/p/15075908.html