[javascript] Express.js에서의 로그인 인증 방법

Express.js는 Node.js 기반의 웹 애플리케이션 프레임워크로, 로그인 인증 기능을 구현하기에 효과적입니다. 이 글에서는 Express.js를 활용하여 로그인 인증을 구현하는 방법에 대해서 알아보겠습니다.

패키지 설치

Express.js에서 로그인 인증을 구현하기 위해서는 몇 가지 패키지를 설치해야 합니다. 다음과 같이 Express.js, Passport.js, Passport-local, bcryptjs 패키지를 설치합니다.

npm install express passport passport-local bcryptjs

Passport 설정

Passport는 Express.js와 함께 사용하기 위한 인증 미들웨어 입니다. 이를 사용하여 로그인 인증을 구현할 수 있습니다. 먼저, passportpassport-local을 require하고, 인증에 필요한 함수와 스키마를 정의합니다.

const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;

const User = require('./models/user'); // 사용자 스키마를 정의한 모델 파일

다음으로, Passport의 serializeUser와 deserializeUser 메소드를 사용하여 사용자 인증 정보를 세션에 저장하고, 세션에서 사용자 정보를 복원하는 방법을 설정합니다. 아래 코드는 사용자의 아이디를 세션에 저장하고, 해당 아이디를 사용하여 사용자 정보를 복원하는 방법을 보여줍니다.

passport.serializeUser((user, done) => {
  done(null, user.id);
});

passport.deserializeUser((id, done) => {
  User.findById(id, (err, user) => {
    done(err, user);
  });
});

다음으로, Passport의 로컬 인증 전략을 정의하고 사용합니다. 아래 코드는 사용자의 아이디와 비밀번호를 사용하여 인증하는 방법을 보여줍니다.

passport.use(new LocalStrategy((username, password, done) => {
  User.findOne({ username: username }, (err, user) => {
    if (err) { return done(err); }
    if (!user) {
      return done(null, false, { message: 'Incorrect username.' });
    }
    if (!user.validPassword(password)) {
      return done(null, false, { message: 'Incorrect password.' });
    }
    return done(null, user);
  });
}));

로그인 라우터 설정

Passport를 설정한 후, Express.js의 라우터에서 로그인 기능을 구현합니다. 이를 위해 필요한 라우터 코드는 다음과 같습니다.

app.post('/login', passport.authenticate('local', {
  successRedirect: '/dashboard',
  failureRedirect: '/login',
  failureFlash: true
}));

위 코드에서 '/login' 라우트에서 POST 요청이 들어오면 Passport의 인증 미들웨어인 passport.authenticate('local')를 사용하여 아이디와 비밀번호를 검증합니다. 인증에 성공하면 /dashboard로 이동하고, 실패하면 /login으로 되돌아가도록 설정했습니다.

로그인 페이지 구현

마지막으로 로그인 페이지를 구현합니다. Express.js와 함께 사용할 템플릿 엔진을 선택하여 로그인 페이지를 렌더링할 수 있습니다. 아래 예제는 EJS 템플릿 엔진을 사용하여 로그인 페이지를 구현하는 방법입니다.

app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

app.get('/login', (req, res) => {
  res.render('login');
});

위 코드에서 '/login' 라우트로 GET 요청이 들어오면 login.ejs 템플릿을 렌더링하여 로그인 페이지를 보여줍니다.

마무리

이제 Express.js를 사용하여 로그인 인증을 구현하는 방법에 대해서 알아보았습니다. Passport를 사용하여 인증 미들웨어를 설정하고, 로그인 라우터를 구현하고, 로그인 페이지를 렌더링함으로써 간단하게 인증 기능을 구현할 수 있습니다.

참고 사이트: Passport.js Documentation