• 平台项目 ~ 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方法

  • 相关阅读:
    kitten编程猫 学习教程(一) 学习笔记
    华为中国生态大会2021举行在即,GaussDB将重磅发布5大解决方案
    华为云官网负责人明哥:我们是如何做到门面不倒,8个月挑战业界翘楚?
    为啥你写的代码总是这么复杂?
    云图说|不要小看不起眼的日志,“小日志,大作用”
    如何高效地存储与检索大规模的图谱数据?
    华为云PB级数据库GaussDB(for Redis)揭秘第十期:GaussDB(for Redis)迁移系列(上)
    开发者必看,面试官心中的最佳数据库人才模型是什么样?
    华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比
    技术实践丨如何解决异步接口请求快慢不均导致的数据错误问题?
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/11226336.html
Copyright © 2020-2023  润新知