Node.js Passport 로그인 구현하기
Written by Sangmin on January 29, 2024

앨범 평점 사이트 하입합 을 만들고 배포 한 후 갑작스럽게 google oauth 로그인이 안되는 유저가 많다는 이야기를 들었다. 급하게 방법을 찾아보다가 새로운 로그인 방법을 만들어야겠다고 생각했다. 이미 passport 패키지를 이용해서 구글 로그인을 구현해봤던지라 로컬 전략을 짜는건 어렵지 않았다.
passport.use(
new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
// Match user
User.findOne({
email: email
}).then(user => {
if (!user) {
return done(null, false, { message: 'That email is not registered' });
}
// Match password
bcrypt.compare(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
return done(null, user);
} else {
return done(null, false, { message: 'Password incorrect' });
}
});
});
})
);
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
bcrypt 는 유저 비밀번호를 암호화하기위해 사용했다.
이렇게한후 해당 라우터에 register 과 login을 생성한 후 프론트쪽에 해당 데이터를 받는 폼을 만들고 post를 보낸다. 유저데이터가 저장되어있는 몽고디비에서 email을 찾은 후 없으면 새로운 유저를 생성하는 식으로 만들었다.
router.post('/login', (req, res, next) => {
passport.authenticate('local', {
successRedirect: '/dashboard',
failureRedirect: '/',
})(req, res, next);
});
passport를 사용하면 로그인은 이렇게 구현하면 돼서 간단하게 할 수 있다 .