main.js 3.5 KB
// 사용 전 npm 설치
// npm install express express-session session-file-store passport passport-local
// npm install body-parser --save

var express = require('express');
var app = express();
var fs = require('fs');
const session = require('express-session');
const exp = require('constants');
const passport = require('passport'), LocalStrategy = require('passport-local').Strategy;
const fileStore = require('session-file-store')(session);
var bodyParser = require('body-parser');


//미들웨어 리스트
app.use(express.urlencoded({extended:false}));
app.use(session({
    secret: 'secret key',
    resave: false,
    saveUninitialized: false,
    store : new fileStore()
  }));
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static('public'));
app.use(bodyParser.urlencoded({extended:false}));

//사용자 정보 session 읽기, 쓰기
passport.serializeUser(function(user, done) {   //쓰기
    done(null, user.email);
});

passport.deserializeUser(function(id, done) {   //읽기
    done(null, id);
});

//메인 페이지
app.get('/', function (req, res) {
    fs.readFile('first.html', function(error, data) {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end(data);
    });
});

//로그인 페이지
app.get('/login',function(req, res) {
    fs.readFile('login.html', function(error, data) {
        res.writeHead(200, { 'Content-Type': 'text/html'});
        res.end(data);
    })
});



//로그인 인증 (Passport)
passport.use(new LocalStrategy({
        //로그인 페이지 input 태그 내 name
        usernameField: 'email',
        passwordField: 'password'
    },
  (id, password, done)=>{
      console.log(id,password);
    //회원 정보가 한개이상 있을때
    if(user){
      console.log(user);

        //아이디가 다를때
        if (id !== user.email)  
            return done(null, false, { message: '아이디가 다릅니다' });
        //비밀번호가 다를때
        else if (password !== user.password) 
            return done(null, false, { message: '비번이 다릅니다' });
        //아이디, 비밀번호 모두 맞을 경우
        return done(null, user);
    }
}));

//로그인 처리 (Passport)
app.post('/login',
passport.authenticate('local', { 
    
    successRedirect: '/main',
    failureRedirect: '/login' 
}));


//회원가입 페이지 Get
app.get('/join',function(req, res) {
    fs.readFile('register.html', function(error, data) {
        res.writeHead(200, { 'Contect-Type': 'text/html'});
        res.end(data);
    })
});

app.get('/main',function(req, res) {
    fs.readFile('main.html', function(error, data) {
        res.writeHead(200, { 'Contect-Type': 'text/html'});
        res.end(data);
    })
});

//회원가입
var user = {};
app.post('/join',(req,res) =>{

    user.email = req.body.email;
    user.password = req.body.password;
    user.name = req.body.name;
    
    //로그인 페이지로 이동
    res.redirect('/login');
});

//로그 아웃 처리
app.get('/logout',(req,res)=>{
    //passport 정보 삭제
    req.logout();
    //서버측 세션 삭제
    req.session.destroy(()=>{
        //클라이언트 측 세션 암호화 쿠키 삭제
        res.cookie('connect.sid','',{maxAge:0});
        res.redirect('/');
    });
});


//포트 연결
app.listen(3000, function() {
    console.log('http://localhost:3000');
});


//로그인 로그아웃 여부
const authInfo = (req)=>{
    if(req.user) return `${user.name} | <a href="/logout">로그아웃</a>`;
    return `<a href="/login">login</a>`;
}