vue token

创建token文件夹 在文件夹下创建token.js文件

const jwt = require('jsonwebtoken');
const jwtSecret = 'lzl1234';  //签名

//登录接口 生成token的方法
var setToken = function (user, pw) {
    return new Promise((resolve, reject) => {
        //expiresln 设置token过期的时间
        //{ user_name: user_name, user_id: user_id } 传入需要解析的值( 一般为用户名,用户id 等)
        const token = jwt.sign({ user: user, pw: pw }, jwtSecret, { expiresIn: '24h' });
        resolve(token)
    })
}
//各个接口需要验证token的方法
var getToken = function (token) {
    return new Promise((resolve, reject) => {
        if (!token) {
            console.log('token是空的')
            reject({
                error: 'token 是空的'
            })
        }
        else {
            //第二种  改版后的
            var info = jwt.verify(token.split(' ')[1], jwtSecret);
            resolve(info);  //解析返回的值(sign 传入的值)
        }
    })
}

module.exports = {
    setToken,
    getToken
}

在app.js里配置token逻辑

const vertoken = require("./token/token");
let expressJwt = require("express-jwt");
//引入token模块 和 jwt 验证token过期时间


//解析token获取用户信息
app.use(function (req, res, next) {
  let token = req.headers["authorization"];
  if (token == undefined) {
    next();
  } else {
    vertoken
      .getToken(token)
      .then((data) => {
        req.data = data;
        next();
      })
      .catch((error) => {
        next();
      });
  }
});

//验证token是否过期并规定那些路由不需要验证
app.use(
  expressJwt({
    secret: "lzl1234",
    algorithms: ["HS256"],
  }).unless({
    path: ["/login"], //不需要验证的接口名称
  })
);

//token失效返回信息
app.use(function (err, req, res, next) {
  if (err.status == 401) {
    return res.status(401).send("token失效");
    //可以设置返回json 形式  res.json({message:'token失效'})
  }
});
app.use("/", loginRouter);
app.use("/", userRouter);
app.use("/", itemRouter);

前端部分

在axios api封装文件中 配置 axios 拦截器 给每一条请求添加携带token的请求头

/添加请求拦截器,会在发起请求之前执行相应的需求
axios1.interceptors.request.use(
  function(config) {
    console.log("我是请求拦截器");
    config.headers.common["Authorization"] =
      "Bearer " + sessionStorage.getItem("token");
    // Do something before request is sent
    return config;
  },
  function(error) {
    // Do something with request error
    return Promise.reject(error);
  }
);

// //添加响应拦截器,会在返回数据后先执行相应的需求
axios1.interceptors.response.use(
  function(response) {
    console.log("我是响应拦截器", response);
    // Do something with response data
    return response;
  },
  function(error) {
    // Do something with response error
    console.log("error", error.status);

    return Promise.reject(error);
  }
);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • koa2+vue 用vue-cli搭建前端项目 用koa2搭建后台,给前端提供数据访问接口 项目结构 用vue-c...
    我才是seven阅读 13,298评论 2 13
  • 自己动手实现一个 axios 前言 作为一名前端er,对于数据请求的第三方工具axios,一定不会陌生,如果还是有...
    Cryptic阅读 8,758评论 0 3
  • vue-cli3项目搭建配置以及性能优化项目初始化 注意:安装前请确保有安装node.js,并且node>=8.9...
    O蚂蚁O阅读 5,266评论 0 1
  • 从18年7月16号入职到现在已经5个月多了,入职之后就一直使用vue,来这边温习记录下使用的步骤。在我的理解中vu...
    好市民学编程阅读 5,958评论 2 12
  • Vue真是太好了 壹万多字的Vue知识点 超详细! 9 ️1⃣️、Vue和其他两大框架的区别 Angular 学习...
    三千繁夢阅读 2,732评论 0 0