반응형
패스포트 설정
passport strategy 설정
인증 성공 시 사용자 정보를 세션에 저장(Serialize), 나중에 세션으로부터 복원이 가능
var express = require('express'),
http = require('http'),
path = require('path');
var bodyParser = require('body-parser'),
static = require('serve-static'),
expressErrorHandler = require('express-error-handler'),
cookieParser = require('cookie-parser'),
expressSession = require('express-session');
var mongoClient = require('mongodb').MongoClient,
mongodb = require('mongodb'),
mongoose = require('mongoose');
var crypto = require('crypto');
var passport = require('passport'),
flash = require('connect-flash');
var config = require('./config'),
route_loader = require('./routes/router_loader'),
user = require('./routes/user'),
database = require('./database/database');
var app = express();
app.set('port', process.env.port || config.server_port);
console.log('포트번호 세팅 : '+ app.get('port'));
//app.set('views', path.join(__dirname, 'views'));
// view 속성값으로 views 폴더를 지정
app.set('views', __dirname +'/views');
//app.set('view engine', 'pug');
app.set('view engine', 'ejs');
console.log('뷰엔진 : '+ app.get('view engine'));
app.use(bodyParser.urlencoded({
extended: false
}));
app.use(bodyParser.json());
app.use('/public', static(path.join(__dirname, 'public')));
app.use(cookieParser());
app.use(expressSession({
secret: 'my key',
resave: true,
saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
// 로컬 스트래티지 설정
var localStrategy = require('passport-local').Strategy;
// 패스포트 로그인 설정
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.findOne({'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 );
});
}
});
});
}));
//사용자 인증에 성공했을시
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);
});
console.log(' ');
//route_loader.init(app, express.Router());
var errorHandler = expressErrorHandler({
static: {
'404': './public/404.html'
}
});
app.use(expressErrorHandler.httpError(404));
app.use(errorHandler);
app.listen(app.get('port'), function () {
console.log('Server Started ' + app.get('port'));
//db연결, 스키마&모델 정의
database.init(app, config);
});
console.log('10');
email을 아이디로 설정.
그에 맞춰 스키마도 변경
반응형
'IT' 카테고리의 다른 글
Html] ckeditor 설정 (0) | 2020.02.11 |
---|---|
Day14 (0) | 2020.02.08 |
Day12 (0) | 2020.02.06 |
Day11 (0) | 2020.02.05 |
Html] CSS 속성 (0) | 2020.02.05 |
댓글