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