创建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);
}
);
