반응형
use() 함수로스트래티지 (인증방식 ) 설정 후 -> 라우팅 함수에서 사용
인증방식은 로컬 인증, 다른 계정 사용하는 OAuth 인증 등 ㅈ나 많다.
var passport = require('passport'),
flash = require('connect-flash');
..
//패스포트 초기화
app.use(passport.initialize());
// 로그인 세션 유지
app.use(passport.session());
// 플래쉬 메세지
app.use(flash());
로컬 Strategy 설정
==> 인증 방식 결정됨.
email을 아이디로 설정.
// 패스포트 로그인 설정
passport.use('local-login', new localStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
}, function(req,email, password, done){
console.log('패스포트의 local-login 호출됨 '+ email);
var database = app.get('database');
database.userModel.findOne({'email':email}, function(err,user){ //검증 콜백
if(err){return done(err)};
//등록된 사용자 없는 경우
if(!user){
console.log('계정이 일치하지 않음 ');
return done(null, false, req.flash('loginMsg', '등록된 계정이 없습니다 '))
}
//비밀번호가 일치하지 않는 경우
var authenticated = user.authenticate(password, user._doc.salt, user._doc.hashed_password);
if(!authenticated){
console.log('비번 일치x');
return done(null, false, req.flash('loginMsg', '비번이 일치하지 않습니다'));
}
//정상인 경우
console.log('계정과 비번이 일치함');
return done(null, user);
});
}));
// 패스포트 회원가입 설정
passport.use('local-signup', new localStrategy({
usernameField:'email',
passwordField:'password',
passReqToCallback:true
},function(req,email, password, done){
var paramName = req.body.name || req.query.name;
console.log('passport login-signup 호출됨 ');
process.nextTick(function(){
var database = app.get('database');
database.userModel.fineOne({'email':email}, function(err, user){
if(err) { return done(err);}
//기존에 이메일이 있다면
if(user){
console.log('이멜이 이미 있습니다 ');
return done(null, false, req.flash('signUpMsg', '계정이 이미 있습니다'));
}else{
//모델 인스턴스 객체 만들어 저장
var user = new database.userModel({'email':email, 'password':password, 'name':paramName});
user.save(function(err){
if(err){throw err;}
console.log('사용자 데이터 추가함 ');
return done(null, user );
});
}
});
});
}));
done 메소드를 통해 결과를 알 수 있다.
4종류의 return.
}function(req,email, password, done){
var database = app.get('database');
database.userModel.findOne({'email':email}, function(err,user){
if(err){return done(err)};
//등록된 사용자 없는 경우
return done(null, false, req.flash('loginMsg', '등록된 계정이 없습니다 '))
//비밀번호가 일치하지 않는 경우
return done(null, false, req.flash('loginMsg', '비번이 일치하지 않습니다'));
//정상인 경우
return done(null, user);
인증 성공시
세션이 만들어지고 사용자 정보를 세션에 저장한다. (Serialize)
나중에 세션에서 그 정보를 가져올 수도 있다.(deserialize)
//사용자 인증에 성공했을시
passport.serializeUser(function(user, done){
console.log('serializeUser 호출됨');
console.log(user);
done(null, user);
});
//사용자 인증 후 요청이 있을때마다 호출
passport.deserializeUser(function(user, done){
console.log('deserializeUser 호출됨');
console.log(user);
done(null, user);
});
반응형
'IT > web' 카테고리의 다른 글
Node.js] 플래쉬 메시지 (0) | 2020.02.08 |
---|---|
Node.js] 라우팅 개념 다시 한번 (0) | 2020.02.08 |
Node.js ] 뷰 렌더링 // ejs, pug (0) | 2020.02.06 |
Node.js] config 설정파일 분리하기 (0) | 2020.02.04 |
Node.js] 모듈화 (0) | 2020.02.02 |
댓글