jsonwebtoken:加密方法

jsonwebtoken:加密方法

概念:
先在后端生成token,再发送到前端接收,前端存储到本地,前端验证的时候发送给后端

1.后端生成token和验证token

exports.sign = (username) => {//添加token加用私钥
  const privateKey = fs.readFileSync(path.join(__dirname, '../keys/rsa_private_key.pem'))
  const token = jwt.sign({username}, privateKey, { algorithm: 'RS256' })//加密谁,私钥,加密类型
  return token
}

exports.verify = (token) => {//验证用公钥
  const publicKey = fs.readFileSync(path.join(__dirname, '../keys/rsa_public_key.pem'))
  const result = jwt.verify(token, publicKey)
  return result
}

2.用户登录后后端将token放在返回头发送给前端

 const token = sign(username)//调用tools文件生成token
      res.set('X-Access-Token', token)//放在返回头首部字段,

      res.render('succ', {
        data: JSON.stringify({
          username
        })
      })  

3.前端接收到token并且保存到本地

 $.ajax({
      url: '/api/users/signin',
      type: 'post',
      dataType: 'json',
      data,
      success: function(res, textStatus, jqXHR) {//后端来的token
        const token = jqXHR.getResponseHeader('X-Access-Token')
        //从头部找token
        localStorage.setItem('lg-token', token)
        //token存在本地
        if(res.ret) {//如果正确
          console.log(res);
          router.go('/index')
        }
      }
    })

4.前端在每次进入页面时,先将本地token发送给后端

$.ajax({
    url: '/api/users/isAuth',
    dataType: 'json',
    headers: {
      'X-Access-Token': localStorage.getItem('lg-token') || ''
      //放在头部往后端发数据
    },
    success(result) {
      if(result.ret) {
        router.go('/index')
      } else {
        router.go('/signin')
      }
    }
  })

5.后端验证前端传来的token

const isAuth = async (req, res, next) => {
  let token = req.get('X-Access-Token')//获取前端发来的请求头的token
  try {
    let result = verify(token)//调用tools里的verify验证token是否正确
    res.render('succ', {//token正确,给前端用户名
      data: JSON.stringify({
        username: result.username
      })
    })
  } catch(e) {
    res.render('fail', {
      data: JSON.stringify({
        message: '请登录。'
      })
    }) 
  }
}
-------------------------------其他-----------------------------------------

网址:jwt.io

1.对称加密HS256

在这里插入图片描述
拿到jwt,去加密,(携带的参数是啥,秘钥)

在这里插入图片描述
i love you是秘钥

2.不对称加密Rs256

先生成私钥,再生成公钥,
创建:
验证时公钥,发送时私钥

使用:
在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值