>  기사  >  웹 프론트엔드  >  nodejs로 백엔드에 로그인하는 방법

nodejs로 백엔드에 로그인하는 방법

WBOY
WBOY원래의
2023-05-23 13:02:39507검색

서버사이드 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

세션 관리 사용

웹 개발 실무에서 세션이란 서버 측에 정보를 저장하는 메커니즘을 의미합니다. key-value 형태로 저장되며, 키는 sessionID, 값은 JSON 형식의 객체로 사용자의 신원 정보, 권한 정보 등을 저장할 수 있습니다.

Node.js에서 기본 세션 관리를 구현하려면 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}`);
});
🎜JWT(JSON 웹 토큰)를 사용하여 토큰 인증 구현🎜🎜세션을 사용하여 사용자 로그인 상태를 관리하는 것 외에도 JWT(JSON 웹 토큰)를 사용하여 토큰 인증을 구현할 수도 있습니다. JWT는 가볍고 안전하며 유연한 인증 프로토콜입니다. 이 프로토콜에서는 서버가 사용자 정보가 포함된 토큰을 생성한 후 클라이언트에 토큰을 반환합니다. 후속 요청은 HTTP 헤더에 토큰을 전달해야 합니다. 🎜🎜JWT를 사용하면 사용자 정보를 서버에 저장할 필요가 없지만 사용자 정보를 토큰에 인코딩하므로 서버의 저장 부담이 줄어든다는 장점이 있습니다. 동시에 토큰에는 사용자 정보가 포함되어 있으므로 클라이언트와 서버 간에 사용자 신원 정보를 쉽게 전송할 수 있습니다. 🎜🎜JWT를 사용하려면 jsonwebtoken 라이브러리를 사용하여 쿼리 작업을 구현해야 합니다. 이 라이브러리는 node.js에서 작동하고 브라우저에서 작동할 수 있습니다. jsonwebtoken을 사용할 때 생성된 토큰이 인증되고 허용될 수 있도록 키와 유효 기간을 설정해야 합니다. 🎜🎜코드 예시: 🎜rrreee🎜위의 방법을 통해 Node.js에서 기본 로그인 인증 기능을 구현할 수 있습니다. 특정 비즈니스 요구 사항에 따라 다양한 솔루션을 선택할 수 있습니다. 동시에 허점이 발생하지 않고 사용자 데이터가 손상되지 않도록 로그인의 보안 및 안정성에도 주의를 기울여야 합니다. 🎜

위 내용은 nodejs로 백엔드에 로그인하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.