서버사이드 JavaScript 런타임 환경을 구현하기 위한 개발 도구로 Node.js가 점차 널리 사용되고 있습니다. Node.js는 이벤트 중심 방식으로 네트워크 애플리케이션을 작성하는 방법을 제공하므로 개발자는 쉽게 서버를 설정하고 웹 기반 애플리케이션을 구축할 수 있습니다.
많은 웹 애플리케이션에서 사용자 로그인은 매우 중요한 부분입니다. 데이터와 비즈니스를 관리하려면 관리자가 백엔드 관리 시스템에 로그인해야 합니다. 따라서 Node.js에서는 기본 로그인 인증 구현이 필요하며, 이 과정에는 사용자 신원 인증, 콜백 관리 등 일련의 작업이 필요합니다.
이 글에서는 미들웨어 사용, 세션 관리 사용, JSON 웹 토큰(JWT)을 사용하여 토큰 인증 구현 등 Node.js의 몇 가지 일반적인 로그인 인증 방법을 소개합니다.
미들웨어 사용
Node.js에서 미들웨어는 HTTP 요청을 처리하고 응답 수정은 물론 요청을 다음 미들웨어로 전달하는 결정을 허용하는 중요한 개념입니다. 따라서 미들웨어를 통해서도 로그인 기능 구현이 완료될 수 있습니다.
미들웨어 사용의 가장 큰 장점은 코드의 가독성과 유지 관리성을 향상시킬 수 있다는 것입니다. 동시에 반복되는 코드 모듈을 줄일 수도 있습니다.
코드 예:
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}`); });
위 코드에서는 express
미들웨어를 사용하여 HTTP 요청 및 응답을 처리하고 express-session
미들웨어를 사용하여 사용자 세션 관리를 수행합니다. . express
中间件来处理HTTP请求和响应,并使用express-session
中间件对用户会话进行管理。
使用session会话管理
在Web开发实践中,session是指在服务器端存储信息的一种机制。它以key-value的形式存储,key是sessionID,而value是一个JSON格式的对象,可以存储用户的身份信息、权限信息等。
Node.js中实现基本的会话管理需要使用express-session
中间件。在使用express-session
中间件时,需要设置一个参数secret
用于签名,这样可以保证session的安全性。同时,需要设置resave
参数和saveUnitialized
参数为false
,这可以避免session的重写和保存未初始化的session。
代码示例:
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 Web Token(JWT)实现token认证
除了使用session来管理用户登录状态之外,还可以使用JSON Web Token(JWT)实现token认证。JWT是一种轻量、安全、灵活的身份验证协议。在该协议中,服务器生成一个包含用户信息的token,然后将该token返回给客户端。后续的请求都需要在HTTP头中携带该token。
使用JWT的好处在于它不需要在服务器上存储用户信息,而是将用户信息编码到token中,这样就减轻了服务器的存储压力。同时,由于token包含了用户信息,因此可以在客户端和服务器端之间轻易地传递用户身份信息。
要使用JWT,需要使用jsonwebtoken
库来实现查询操作,该库可以在node.js中工作和浏览器中工作。在使用jsonwebtoken
express-session
미들웨어를 사용해야 합니다. express-session
미들웨어를 사용할 때 세션의 보안을 보장할 수 있는 서명에 대한 매개변수 secret
를 설정해야 합니다. 동시에 resave
매개변수와 saveUnitialized
매개변수를 false
로 설정해야 세션 재작성 및 초기화되지 않은 세션 저장을 방지할 수 있습니다. 🎜🎜코드 샘플: 🎜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}`); });
jsonwebtoken
라이브러리를 사용하여 쿼리 작업을 구현해야 합니다. 이 라이브러리는 node.js에서 작동하고 브라우저에서 작동할 수 있습니다. jsonwebtoken
을 사용할 때 생성된 토큰이 인증되고 허용될 수 있도록 키와 유효 기간을 설정해야 합니다. 🎜🎜코드 예시: 🎜rrreee🎜위의 방법을 통해 Node.js에서 기본 로그인 인증 기능을 구현할 수 있습니다. 특정 비즈니스 요구 사항에 따라 다양한 솔루션을 선택할 수 있습니다. 동시에 허점이 발생하지 않고 사용자 데이터가 손상되지 않도록 로그인의 보안 및 안정성에도 주의를 기울여야 합니다. 🎜위 내용은 nodejs로 백엔드에 로그인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!