main.js
3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
// 사용 전 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>`;
}