zoukankan      html  css  js  c++  java
  • JWT(token) 的使用

    1.什么是token

    token是一个令牌,是前后端开发时的一个验证工具,(就是一个字符串)

    2.token的使用流程

    1.前端向后端传递用户名和密码
    2.后端将接收到的的用户名和密码进行核实
    3.后端核实成功后会,返回给前端一个token或者直接将token保存在cookie中);
    4.前端得到token 并对其进行保存
    5.如果前端请求隐私的接口(比如需要登陆后才能查看商品的详细信息),则需要传递保存的token(进行ajax请求时,将信息放在请求头中)
    6.后端对其进行验证,如果token错误,则请求不到数据,返回给前端相应的提示         如果token验证正确,则 获取相应的数据,并返回给前端

    3.JWT的构成

     JWT是由三部分构成,将这三段信息文本用链接构成了JWT字符串,    header + payload +secret = 加密的字符串
    1.header 头部

    2.payload 负载-------写相关的信息
      {
        user:"签发者",
        exp:"token过期时间"//必须大于签发时间
      }

    3.secret 密钥------用来进行jwt的签发和jwt的验证,它就是你服务端的私钥,在任何场景都不应该流露出去

    4.后端JWT的构建

      // 1.下载包
            npm install jsonwebtoken --save-dev
    
        // 2.引入
            var JWT = require("jsonwebtoken");
    //负载信息 let payload = { user:"sun", // exp:"1000 * 60"//单位 ms } //密钥 let secret = "123456";
    //生成token,exporesIn为过期时间,单位:ms/h/days/d eg:1000, "2 days", "10h", "7d" let token= JWT.sign(payload,secret,{expiresIn:"1h"})
    //将token保存在cookie中 res.cookie("token",token);

    5.前端请求保密性的信息(比如:必须登录后,才能查看商品的详细信息),发送JWT

      //获取cookie,
        var token = $.cookie("token");
        //发起ajax请求,将token发送到后端
        $.ajax({
            type: "get",
            url: "/goods",
            //将信息保存在请求头中
            headers: {
                auth: token
            }
    
        })

    6.后端验证JWT

    //获取前端传来的tokenlet token = req.headers.auth;
      JWT.verify(token, "密钥", (err, decoded) => {
        if (err) {
                //验证失败
                //console.log("令牌失效");
                res.json({
                    status:false,
                    info:"令牌失效"
                })
            } else {
                //验证成功
                //获取前端需要的相应数据
            //返回给前端相应的信息
             res.json({
                    status:true,
                    info:请求的数据
                })
            }
        })

     参考:https://www.npmjs.com/package/jsonwebtoken

  • 相关阅读:
    crontab与系统时间不一致
    MySQL构造测试数据
    【SQL优化】SQL优化工具
    mysql case when then 使用
    update没带where,寻找问题的思路
    线程池
    线程理论
    数据共享
    进程池
    管道
  • 原文地址:https://www.cnblogs.com/SRH151219/p/10387036.html
Copyright © 2011-2022 走看看