【token身份认证】+jwt技术

1. token身份认证

1. 介绍:

token身份认证【令牌】是服务端对客户端请求进行身份检查的一种技术;
用户登录成功后,服务端会生成token令牌响应给客户端;客户端后续请求必须携带此token,服务端获取token进行身份认证判断,确定该请求为正确请求后,才响应请求数据。

2. 前端实现思路:

  • 用户登录成功,保存服务端响应的token到本地
  • 在axios拦截器中设置token到Authorization 请求头

3. 后端实现思路:

  • 判断用户登录成功, 生成token令牌, 响应给用户
  • 拦截需要身份认证的所有请求,获取客户端发送的Authorization 请求头进行token验证

4. token时序图

5. jwt技术实现token认证技术的一种技术方案

1. 安装

npm i jsonwebtoken

2. 封装生成和认证token代码

3.

      const jwt = require('jsonwebtoken') //引入jwt库
      const tokenSecrit = 'token-h52203'
      const Token = {
      	/**
      	 * 生成token令牌
      	 * @param {*} data
      	 * @returns
      	 */
      	entrypt: function (data) {
      		return jwt.sign(data, tokenSecrit, { expiresIn: '10h' })
      	},
          /**
           * 验证token
           * @param {*} token 
           * @returns 
           */
      	decrypt: function (token) {
      		try {
      			let data = jwt.verify(token, tokenSecrit)
      			return {
      				token: true,
      			}
      		} catch (error) {
      			return {
      				token: false,
                      data:error
      			}
      		}
      	},
      }
      
      module.exports = Token

4. 拦截所有请求进行认证

5.

      /**
       * app.js模块文件中
       * token统一认证
       */
      app.all('/*',function(req,res,next){
          // 如果是登录、注册等不需要认证的接口,直接放行
          console.log('req.url ',req.url);
          let noAuthor = ['/user/login','/user/register']
          if(noAuthor.indexOf(req.url) !== -1){
              next() //直接放行
              return
          }
          // token认证
      	let token = null
      	// 1. 是否存在token
      	if(req.headers.authorization){
      		token = req.headers.authorization
      	}
      	// 2. 验证token正确性
       	let data = jwtToken.decrypt(token)
          if(data.token){
              next()
          }else{
              res.send({
                  code:-1,
                  message:'token认证失败'
              })
          }
      
         
      })

6. 前端需要认证的接口设置头

      // 获取登录时保存的token
      	let tokenStr = localStorage.getItem('TOKEN')
      	let token = JSON.parse(tokenStr)
      
      	axios({
      		method: 'get',
      		url: 'http://10.7.173.110:3000/product/list',
      		headers: { authorization: token }, // token设置
      	}).then(res => {
      		let { data } = res
      		if (data.code == 1) {
      			let list = data.message.list
      			showProductList(list)
      		}
      	})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值