Nodejs Express 登入模块及JWT 验证

2021/4/14 12:29:10

本文主要是介绍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();
    });
  });
});


这篇关于Nodejs Express 登入模块及JWT 验证的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程