你听说过那个叫做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}`); });
。
评论0