首页 > 其他分享 >cookie,session,token介绍,jwt原理介绍,base64编码和解码,drf-jwt快速使用,drf-jwt修改返回格式,自定义user表,签发token

cookie,session,token介绍,jwt原理介绍,base64编码和解码,drf-jwt快速使用,drf-jwt修改返回格式,自定义user表,签发token

时间:2022-10-12 17:36:07浏览次数:52  
标签:base64 jwt token session import drf

1.cookie,session,token介绍

这三者之间是有联系的,在互联网发展初期先有了cookie,在发展的过程中,因为出现了登录,还有购物车等功能,这是http的请求是无状态的,这是要解决这个问题,于是session就出来了,每次发送http请求的时候,都会带过来session,session说白了就是一段字符串,如果用了两个机器作为一个集群,此时在a机器申请的b机器不知道,要是a机器坏了就没办法保存,这是就把两个机器每隔一段时间复制一次,后来有个人提出来既然都要复制,那我们为什么不把session做一个新的,当有请求的时候让这两台机器去调用session就好了,这样做有个弊端,那就是如果session坏了,那不是所有人都要重新登录一遍,于是token就出来了,token就相当于一个令牌,只要调用这个令牌就是你在访问,就不用掉session,但是这样,如果别人可以伪造个token的话,那不是所有人都能用你这个token去发请求,于是自己加个一个令牌,然后用加密给所有token给加密了,这是只有我才知道这么秘钥,每当别人发请求的时候只有我才有这个秘钥,此时在进行解码,如果这个秘钥能解,那么我就知道登录了,这时可以直接取到他的id就能知道是这个人在操作了

2.jwt原理介绍

其实说白了jwt就是一串字符串,由三段构成,分别是头,载荷,令牌,最终显示的是这样的:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

    # header:头
        -声明类型,这里是jwt
        -声明加密的算法 通常直接使用 HMAC SHA256
        -公司信息
        由
        {
          'typ': 'JWT',
          'alg': 'HS256'
        }
        变成了(base64的编码)
        eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
    # payload:荷载
        exp: jwt的过期时间,这个过期时间必须要大于签发时间
        iat: jwt的签发时间
        用户信息: 用户信息
        由
        {
          "exp": "1234567890",
          "name": "John Doe",
          "userid": 3
        }
       变成了(base64的编码)
       eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9
        
    # signature:签名
        把头和荷载加密后得到的:TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

3.base64编码和解码

import base64
import json
w='123'
w1 = json.dumps(w) #转换成json格式
s = base64.b64encode(w1.encode('utf-8'))   #加密
print(s)

s1 = base64.b64decode(s)   #解密
print(s1)

4.drf-jwt快速使用

drf-jwt只能使用auth的user表来签发token,要是不用auth中的user来签发token则需要我们自己写个逻辑

同时用drf-jwt就不用我们写登录接口,因为他已经配置好登录接口了

在路由中写

from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    path('login/', obtain_jwt_token),
]

当前端访问时,我们需要写个视图类,然后在需要加个身份类验证,在加个是否登录的认证就行。

from rest_framework.views import APIView
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

class TestView(APIView):
    authentication_classes = [JSONWebTokenAuthentication, ]
    permission_classes = [IsAuthenticated, ]

    def get(self,request ):
        return Response('OK')

5.drf-jwt修改返回格式

需要从drf-jwt配制文件中找他原来的返回格式在'JWT_RESPONSE_PAYLOAD_HANDLER'这个后面,然后把他写的cv下来,return是自己加几个值就行,同时需要修改配制文件中的DATABASES,把这个字典name的value加个str,或者os.path.join就好

def jwt_response_payload_handler(token, user=None, request=None):
    return {
        'code' : 101,
        'user' : user.username,
        'msg'  :'登录成功',
        'token': token
    }


JWT_AUTH = {'JWT_RESPONSE_PAYLOAD_HANDLER' :'app01.request.jwt_response_payload_handler'}

 

标签:base64,jwt,token,session,import,drf
From: https://www.cnblogs.com/shangxin-bai/p/16785311.html

相关文章

  • JWT Token解析
    参照:c#中token的使用方法实例_C#教程_脚本之家(jb51.net)(7条消息)JWT算法_み旋律的博客-CSDN博客_jwt算法......
  • Java--字符串使用StringTokenizer来分割字符,由小写转大写,由大写转小写
    我们再来看看Java的字符串分割另外一种方法,使用StringTokenizer 可以使用StringTokennizer设置不同分隔符来分隔字符串,其默认的分割符是:空格"",制表符(\t),换行符(......
  • drf学习-9
    drf之内置认证类BasicAuthenticationRemoteUserAuthenticationSessionAuthentication:session认证 如果前端带着cookie过来,经过session的中间件,如果登录了,在request.use......
  • drf-接口文档
    接口文档接口编写已经写完了,需要编写接口文档,给前端的人使用-请求地址-请求方式-支持的编码格式-请求参数(get,post参数)-返回格式示例在公司的写法1)直接使用wor......
  • drf-09
    django配置文件1.根路径:BASE_DIR=Path(__file__).resolve().parent.parent2.django加密使用-秘钥SECRET_KEY='django-insecure-ov_#*#-o&svxjrtxe1op*%3wfobg)+)&k......
  • drf9-内置认证类 权限类 频率类 过滤类其他使用 全局异常抛出 文档接口
    -内置认证类-权限类-频率类-过滤类其他使用-全局异常抛出-文档接口内置认证类,权限类,频率类#内置的认证类 -BasicAuthentication -RemoteUserAuthentication -Se......
  • 【2022-10-11】DRF从入门到入土(九)
    drf之内置认证类BasicAuthenticationRemoteUserAuthenticationSessionAuthentication:session认证 如果前端带着cookie过来,经过session的中间件,如果登录了,在request.use......
  • 【2022.10.11】drf(9)
    今日内容内置认证类内置权限类内置频率类补充Django的配置文件以及每一个配置文件的作用过滤类的其他使用全局异常处理接口文档1......
  • django配置文件介绍,drf全局异常处理,drf接口文档
    内置认证类、权限类、频率类django配置文件介绍过滤类的其他使用全局异常处理接口文档内置认证类、权限类、频率类#内置的认证类 BasicAuthenticatio......
  • drf学习笔记
    今日内容概要内置认证类,权限类,频率类django的配置文件每个配置项的作用过滤类的其他使用全局异常处理接口文档今日内容详细内置认证类,权限类,频率类内置的认......