平台项目 ~ JWT 全局认证

一 简介: 用户登录的验证

二 验证机制:
    1 session session需要在服务端存储能够通过session_id而获取的信息,每次请求到达服务端时,需要根据session_id这个key值,获取存储在内存/磁盘/数据库中的信息
    2 token token 信息均在token里面,服务端只需要根据token中定义的算法进行解析,即可获得所需认证信息。所以一个是memory cost,一个是time cost
   eg: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX3R5cGUiOjEsIm5iZiI6MTUyNjg4NjYzM30.CTZH48xD_TdtDZcgAd8exiCxkryXASruDCbRHsFFD5Y
三 JWT简介
   JWT(Json Web Token)是实现token认证的一种通用标准。
四 JWT 安装与全局认证设置
   1 安装插件
     pip3 install djangorestframework-jwt
   2 setting中全局设置进行
    这里要注意,会对所有VIEW进行验证
    REST_FRAMEWORK = {
    # 权限认证
'   DEFAULT_PERMISSION_CLASSES': (
'   rest_framework.permissions.IsAuthenticated',
   ),
   # 身份验证
'   DEFAULT_AUTHENTICATION_CLASSES': (
   'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
   ' rest_framework.authentication.SessionAuthentication',
  'rest_framework.authentication.BasicAuthentication',
    ), 
   }
五 整体使用
  1 登录完成后自动生成token并返回前端
    from rest_framework_jwt.settings import api_settings
    jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
    jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
    user = Account.objects.filter(username=username).first()
   payload = jwt_payload_handler(user)

   token = jwt_encode_handler(payload)
   return Response{'token':token}
   注意:这里的user为django自带user表查询的queryset,必须要有
 2 前端VUEX进行读取变量并存储在全局变量
 3 前端vue根据全局变量构建每个api访问的request.header
  if (store.getters.token) {
   console.log('能进入')
   config.headers['authorization'] = 'JWT ' + getToken()
   }
 注意:这里token格式为 jwt+token,并且authorization一定要小写
 4 进行api端口测试

六 权限相关  

  1 默认的角色
    1 AllowAny 放任一切
    2 IsAuthenticated 只有验证的才能放行 
    3 IsAdminUser 超级管理员
    4 IsAuthenticatedOrReadOnly 将允许经过身份验证的用户执行任何请求。只有当请求方法是“安全”方法(GET, HEAD 或 OPTIONS)之一时,才允许未经授权的用户请求。

  2 自定义权限 
   要实现自定义权限,请重写BasePermission并实现以下方法中的一个或两个
   .has_permission(self, request, view)
    .has_object_permission(self, request, view, obj)
    1 如果请求被授予访问权限,方法应该返回True,否则返回False
    2 仅当视图级has_permission检查已通过时,才会调用实例级has_object_permission方法

原文地址:https://www.cnblogs.com/danhuangpai/p/11226336.html