所有分类
  • 所有分类
  • 后端开发
Node.js编程神器:Express中间件+Express-session助你登录无忧

Node.js编程神器:Express中间件+Express-session助你登录无忧

在许多Web应用程序中,用户登录是一个非常重要的部分。管理员需要登录后台管理系统进行对数据和业务的管理。登录后复制在上面的代码中,我们使用了express中间件来处理HTTP请求和响应,并使用express-session中间件对用户会话进

你听说过那个叫做Node.js的东西吗?真的超级赞~它让我们编写服务器端JavaScript变得更容易,写起网络软件、搭建服务器还有Web应用都飞快。不过要注意对于Web应用来说,用户登录可是关键中的关键就像后台管理系统那样,管理员们需要用它来操控数据、处理工作等等。所以,在用Node.js编程时,搞定基本的登录验证可是至关重要!要包含用户身份识别和会话管理之类的环节。

使用中间

听过没?Node里有个中转站儿叫”中间件”,那能力可是杠杠滴!像HTTP请求、回复这种小事儿,它可轻松解决;还能把前后的相关部分串联起来。这样一来,弄个登录啥的不就易如反掌!乔巴说了,它的好处就在于能让我们写的代码看起来更舒服,就算改来改去也不会头疼。再者,他还能帮我们省下许多重复打字的时间。比如说那个实例我们用的是Express中间件去处理HTTP,再加上Express-session去管客人会面的事情。

快来试试 Express!这个超级火爆的 Node.js Web框架让网页编程变得简单得像家常便饭!而且还有一个神器叫 Express-session,能帮你轻松解决用户 session 的问题。只要用户一登录,立马查查他以前是否来过这儿,有没有权限,这么一搞,我们就能知道应不应该让他们看些什么或干点儿什么了。

简单说,只需要在咱们的中间件里添加一些新的功能模块,就可以让登录验证变得更加智能和灵活。比如那个叫PASSPORT.JS的小东西,它可是能够处理各种登陆方法,从本地账户到社交媒体账户等等都不在话下!

const express = require('express');
const app = express();
const port = 3000;
//中间件
app.use(express.urlencoded({extended: false}));
app.use(express.json());
//登录页面
app.get('/login', function(req, res) {
  res.sendFile(__dirname + '/login.html');
});
//登录验证
app.post('/login', function(req, res){
  const username = req.body.username;
  const password = req.body.password;
  if(username === 'admin' && password === '123456'){
    // 验证成功,则可以将用户信息存储到session中
    req.session.userinfo = req.body;
    res.send('登录成功');
  }else{
    res.send('用户名或密码错误!');
  }
});
app.listen(port, function(){
  console.log(`Server is running on port ${port}`);
});

使用会话管理

直白点说,网页开发中那个叫“会话”的东西就好比是服务器给咱们准备的存放数据的小箱,而且钥匙和数值都绑在一起了,咱们把它叫做”sessionID”。而里面装着的主要是用户信息、权限等等的JSON数据包。要用Node.js搞出这种会话技术?别担心,有Express-session这个法宝。

快学学咋管好聊天记录其实挺容易的,调调secret、resave和saveUnitialized就行!我给你仔细说说,secret就是防着你的聊天记录被人瞎弄;提到resave,它就是保平安的,哪怕还没开始聊或有什么变故,也能帮你稳当当存起;最后讲讲saveUnitialized,这个厉害了,连没有初始化过的聊天记录都能塞进内存。

嘿,别忘了哟!在注册或登陆账户时,对话管理真的很重要呢!这个小帮手会记住你的身份,避免反复输入密码。这样一来,无论在哪儿,只要点击几下就搞定~

const express = require('express');
const app = express();
const session = require('express-session');
const port = 3000;
//使用express-session中间件
app.use(session({
  secret: 'sessiontest',
  resave: false,
  saveUnitialized: false,
  cookie: {
    maxAge: 1000 * 60 * 30
  }
}));
// 登录页面
app.get('/login', function(req, res) {
  res.sendFile(__dirname + '/login.html');
});
//登录验证
app.post('/login', function(req, res){
  const username = req.body.username;
  const password = req.body.password;
  if(username === 'admin' && password === '123456'){
    // 验证成功,则可以将用户信息存储到session中
    req.session.userinfo = req.body;
    res.send('登录成功');
  }else{
    res.send('用户名或密码错误!');
  }
});
//后台页面
app.get('/admin', function(req, res){
    // 验证session中是否存储了用户信息
    const userinfo = req.session.userinfo;
    if(userinfo && userinfo.username){
        res.sendFile(__dirname + '/admin.html');
    }else{
        //如果未存储,则重定向到登录页面
        res.redirect('/login');
    }
});
app.listen(port, function(){
  console.log(`Server is running on port ${port}`);
});

咱们就试试用JSON网络令牌(JWT),轻松搞定Token认证

别忘了,除了用 session 控制登录外,还可以通过 JSON Web Token (JWT)这种方法~简单来说就是服务器会发给你一个装有用户信息的“通行证”,下次登录时别忘了把它带在身上哟~

用 JWT 当认证,再也不用担心数据存储问题,各大网站互相查证也更便捷简单。使用 Node.js 的 jsonwebtoken就能轻松实现这一点。但别忘了设定好密钥和期限,否则你的Token可能就易被他人窃取!

我们的JWT主要就是把要发送出去的信息搞得像个锁头似的,变成”sessoken”,而且它还有防止隐私泄露的功能!接下来,这个”sessoken”就会放到HTTP头部去,保证不让人偷走。这么做当然是为了让咱们和服务端的信息传输更有保障了。

其实搞定Node.js的登陆认证就这么回事儿,基本上就是这些招数,操作起来可简便呢~不过,对于具体怎么做还得看你要干嘛。根据需求挑选合适的办法,千万注意别让系统出错呦!

const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const port = 3000;
//生成Token
app.post('/login', function(req, res){
  const username = req.body.username;
  const password = req.body.password;
  if(username === 'admin' && password === '123456'){
    const userinfo = {
      name: username
    }
    //在jsonwebtoken中生成Token
    jwt.sign(userinfo, 'secretkey', {expiresIn: '10min'}, function(err, token){
      if(err) throw err;
      res.json({
        token: token
      });
    })
  }else{
    res.send('用户名或密码错误!');
  }
});
// 验证Token
app.get('/admin', verifyToken, function(req, res){
  res.sendFile(__dirname + '/admin.html');
});
//中间件,用于验证Token
function verifyToken(req, res, next){
  //从请求头中获取Token
  const bearerHeader = req.hearders['authorization'];
  if(typeof bearerHeader !== 'undefined'){
    const bearerToken = bearerHeader.split(' ')[1];
    // 在jsonwebtoken中验证Token
    jwt.verify(bearerToken, 'secretkey', function(err, data){
      if(err) res.sendStatus(403);
      req.userinfo = data;
      next();
    });
  }else{
    res.sendStatus(403);
  }
};
app.listen(port, function(){
  console.log(`Server is running on port ${port}`);
});

原文链接:https://www.icz.com/technicalinformation/web/2024/04/14606.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?