Nodejs Express 登入模块及JWT 验证
install package
express-jwt
jsonwebtoken
md5
app.js 配置
//使用此方法拦截所有请求看token是否正确(此方法写在静态资源加载之后,不然静态资源不能访问)
app.use(expressJWT({
secret: PRIVITEKEY,
algorithms: ['HS256']
}).unless({
path: ['/admin/login'] //⽩白名单,除了了这⾥里里写的地址,其他的URL都需要验证
}));
login
// 登录接口
router.post("/login",async (req,res,next) => {
try {
// 对应前台的传参
let {username,password} = req.body;
// 跟数据库对应,看是否存在当前用户
password = md5(`${password}${SAULT}`);
pool.getConnection(function (err, connection) {
// 获取前台页面传过来的参数
var param = req.query || req.params;
// 建立连接 增加一个用户信息
connection.query("select * from admin where username = ? and password = ?",[username,password], function (err, result) {
if (result) {
let token = jwt.sign({username, role: result[0].role},PRIVITEKEY,{expiresIn:EXPIRESD});
res.send({
code:0,
msg:"登录成功",
token:token
})
}else {
res.send({
code:-1,
msg:"用户名或者密码错误"
})
}
// 释放连接
connection.release();
});
});
} catch (error) {
// p抛出异常并交由错误中间件处理
console.log(error);
next(error);
}
})
filter
let filter = (req, res, next) => {
var user = req.user
console.log(user)
if (user != null && (user.exp > user.iat)) {
next()
} else {
res.send({
code: -1,
msg: "用户名或密码错误"
})
}
}
使用 filter
// 获取用户
router.get('/', filter.admin_filter, function (req, res, next) {
// 从连接池获取连接
pool.getConnection(function (err, connection) {
// 获取前台页面传过来的参数
var param = req.query || req.params;
// 建立连接 增加一个用户信息
connection.query(userSQL.queryAll, function (err, result) {
if (result) {
var data = {
code: 200,
msg: 'success',
result: result
};
}
// 以json形式,把操作结果返回给前台页面
responseJSON(res, data);
// 释放连接
connection.release();
});
});
});

浙公网安备 33010602011771号