본문 바로가기
IT

Day13

by 깻잎쌈 2020. 2. 7.
반응형

 

패스포트 설정 

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

댓글