Passpor는 node.js express에서 사용하는 인증관련 미들웨어다. 기본적인 인증 시스템 지원과 더불어 구글, 트위터, 페이스북 과 같이 소셜로그인도 passport를 이용해 간편하게 할 수 있다. passport는 어플마다 고유의 인증방식이 있음을 간주하고. 각 인증방식을 stragies라는 개별적인 모듈로 만든다. 우리는 stragies를 통해 local이나 google과 같은 인증방식을 구현할 수 있다.
$ npm install passport
passport.js에서 다양한 인증 방법을 stragies로 제공한다. 아래의 공식문서를 보면 다양한 stragies가 존재함을 볼 수 있다. 그 중 우리는 기본적인 사용자 id와 passport를 이용한 인증 방법인 local strategy를 사용해보자.
passport-local을 패키지로 설정하고 기본 local은 session 방법을 사용하고 있기 때문에 express-session을 패키지로 설치해야한다.
$ npm passport-local express-session
// app.js
app.use(passport.initialize());
app.use(passport.session());
app.use(passport.initialize())
passport를 사용한다고 express에게 알린다app.use(passport.session());
session을 이용하여 passport를 동작한다.app.use(session({...}))
코드 다음에 passport 미들웨어를 등록한다.app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login' }));
/login
으로 요청이 들어왔을때 passport 실행.local
전략 사용/
으로 이동/login
으로 이동var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
{
usernameField: 'username',
passwordField: 'password'
},
function(username, password, done) {
User.findOne({ username: username }, function (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);
});
}
));
done(null, user)
로 user에 대한 정보를 리턴한다.done(null, false)
를 리턴하고 실패한 이유를 메세지로 전달할 수 있다.done(err)
에러를 리턴한다.passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
done(err, user)
user를 done함수에 2번째 인자로 전달하면 request.user 객체에 전달된다.app.get('/logout', function(req, res){
req.logout();
req.session.save((err) => {
res.redirect('/');
});
});