Mukho

Add date and time in Log

...@@ -37,6 +37,16 @@ app.use("/js", express.static(__dirname + "/js")); ...@@ -37,6 +37,16 @@ app.use("/js", express.static(__dirname + "/js"));
37 app.use("/chat", express.static(__dirname+ "/chat")); 37 app.use("/chat", express.static(__dirname+ "/chat"));
38 app.set('view engine', 'ejs') 38 app.set('view engine', 'ejs')
39 39
40 +// 로그용
41 +var today = new Date();
42 +var year = today.getFullYear();
43 +var month = ('0' + (today.getMonth()+1)).slice(-2);
44 +var day = ('0' + today.getDate()).slice(-2);
45 +var hour = ('0' + today.getHours()).slice(-2);
46 +var minute = ('0' + today.getMinutes()).slice(-2);
47 +var second = ('0' + today.getSeconds()).slice(-2);
48 +var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
49 +
40 app.use(session({ 50 app.use(session({
41 secret: 'keyboard cat', 51 secret: 'keyboard cat',
42 resave: false, 52 resave: false,
...@@ -83,5 +93,5 @@ io.sockets.on('connection', function(socket) { ...@@ -83,5 +93,5 @@ io.sockets.on('connection', function(socket) {
83 }) 93 })
84 94
85 server.listen(PORT, function(){ 95 server.listen(PORT, function(){
86 - console.log("서버를 구동합니다.(Port: "+PORT+")"); 96 + console.log(logString+"서버가 시작되었습니다.(Port: "+PORT+")");
87 }); 97 });
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -55,7 +55,7 @@ SET @COUNT = 0; ...@@ -55,7 +55,7 @@ SET @COUNT = 0;
55 UPDATE board SET idx = @COUNT:=@COUNT+1; 55 UPDATE board SET idx = @COUNT:=@COUNT+1;
56 입력<h2><br><br> 56 입력<h2><br><br>
57 57
58 -최종 수정: 2021-11-20 12:32<br> 58 +최종 수정: 2021-11-20 01:30<br>
59 최종 수정 내용: 59 최종 수정 내용:
60 <h2>★★필수입력★★<h2> 60 <h2>★★필수입력★★<h2>
61 alter table board drop passwd; 61 alter table board drop passwd;
...@@ -63,7 +63,7 @@ alter table board add ID varchar(20) not null; ...@@ -63,7 +63,7 @@ alter table board add ID varchar(20) not null;
63 alter table board change name nickname; 63 alter table board change name nickname;
64 alter table board modify nickname varchar(20); 64 alter table board modify nickname varchar(20);
65 65
66 -게시글 수정 및 삭제 세션+권한 연동/DB수정, 버그 수정, 게시글 조회수 구현, 프로필 수정 세션 연동<br> 66 +로그 보강, 게시글 수정 및 삭제 세션+권한 연동/DB수정, 버그 수정, 게시글 조회수 구현, 프로필 수정 세션 연동<br>
67 수정 내용: about/사이트 git 링크 추가, 프로필 추가, 메뉴바/하단 추가, 게시판에 기본 서식 추가, 로그인시에만 게시판 관련 경로에 접근가능하게 함, 사용자 로그 생성, 경로 지정 수정, 제목 추가, userDB, 회원가입에 nickname요소 추가, 세션에 ID + 닉네임 전달기능 추가, 게시판의 글쓰기 및 글 열람 기능 추가. 67 수정 내용: about/사이트 git 링크 추가, 프로필 추가, 메뉴바/하단 추가, 게시판에 기본 서식 추가, 로그인시에만 게시판 관련 경로에 접근가능하게 함, 사용자 로그 생성, 경로 지정 수정, 제목 추가, userDB, 회원가입에 nickname요소 추가, 세션에 ID + 닉네임 전달기능 추가, 게시판의 글쓰기 및 글 열람 기능 추가.
68 68
69 <!-- http://khuhub.khu.ac.kr/2017104034/Singer-Composer --> 69 <!-- http://khuhub.khu.ac.kr/2017104034/Singer-Composer -->
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -3,13 +3,26 @@ var app = express() ...@@ -3,13 +3,26 @@ var app = express()
3 var router = express.Router(); 3 var router = express.Router();
4 var path = require('path') // 상대경로 4 var path = require('path') // 상대경로
5 5
6 +// 로그용
7 +var today = new Date();
8 +var year = today.getFullYear();
9 +var month = ('0' + (today.getMonth()+1)).slice(-2);
10 +var day = ('0' + today.getDate()).slice(-2);
11 +var hour = ('0' + today.getHours()).slice(-2);
12 +var minute = ('0' + today.getMinutes()).slice(-2);
13 +var second = ('0' + today.getSeconds()).slice(-2);
14 +var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
15 +
6 // main page는 login이 된 상태(세션정보가 있을때만) 접근이 가능하게 하자 -> info에 구현해놓음. 16 // main page는 login이 된 상태(세션정보가 있을때만) 접근이 가능하게 하자 -> info에 구현해놓음.
7 router.get('/', function(req, res){ 17 router.get('/', function(req, res){
8 var id = req.user; 18 var id = req.user;
9 - if(!id) res.sendFile(path.join(__dirname, "../../public/about.html")) 19 + if(!id){
20 + console.log(logString+'익명의 유저가 about 페이지에서 작업 중입니다.')
21 + res.sendFile(path.join(__dirname, "../../public/about.html"))
22 + }
10 if(id){ 23 if(id){
11 var nickname = req.user.nickname; 24 var nickname = req.user.nickname;
12 - console.log(req.user.ID+'('+nickname+') 유저가 about 페이지에서 작업 중입니다.') 25 + console.log(logString+req.user.ID+'('+nickname+') 유저가 about 페이지에서 작업 중입니다.')
13 res.render('about.ejs', {'ID': id, 'nickname': nickname}); 26 res.render('about.ejs', {'ID': id, 'nickname': nickname});
14 } 27 }
15 }); 28 });
......
...@@ -8,9 +8,22 @@ var path = require('path') // 상대경로 ...@@ -8,9 +8,22 @@ var path = require('path') // 상대경로
8 var mysql_odbc = require('../../db/db_board')(); 8 var mysql_odbc = require('../../db/db_board')();
9 var board = mysql_odbc.init(); 9 var board = mysql_odbc.init();
10 10
11 +// 로그용
12 +var today = new Date();
13 +var year = today.getFullYear();
14 +var month = ('0' + (today.getMonth()+1)).slice(-2);
15 +var day = ('0' + today.getDate()).slice(-2);
16 +var hour = ('0' + today.getHours()).slice(-2);
17 +var minute = ('0' + today.getMinutes()).slice(-2);
18 +var second = ('0' + today.getSeconds()).slice(-2);
19 +var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
20 +
11 router.get('/list/:page', function(req, res, next) { 21 router.get('/list/:page', function(req, res, next) {
12 var id = req.user; 22 var id = req.user;
13 - if(!id) res.redirect('/board/list/1') 23 + if(!id){
24 + console.log(logString+'익명 유저의 게시판 접근을 거부했습니다.')
25 + res.redirect('/board/list/1')
26 + }
14 else{ 27 else{
15 var page = req.params.page; 28 var page = req.params.page;
16 var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " + 29 var sql = "select idx, nickname, title, date_format(modidate,'%Y-%m-%d %H:%i:%s') modidate, " +
...@@ -19,7 +32,7 @@ router.get('/list/:page', function(req, res, next) { ...@@ -19,7 +32,7 @@ router.get('/list/:page', function(req, res, next) {
19 if (err) console.error("err : " + err); 32 if (err) console.error("err : " + err);
20 var id = req.user.ID; 33 var id = req.user.ID;
21 var nickname = req.user.nickname; 34 var nickname = req.user.nickname;
22 - console.log(req.user.ID+'('+nickname+') 유저가 게시판을 보고 있습니다.') 35 + console.log(logString+req.user.ID+'('+nickname+') 유저가 게시판을 보고 있습니다.')
23 res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '게시판 리스트', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true}) 36 res.render('list.ejs', {'ID':id, 'nickname': nickname, title: '게시판 리스트', rows: rows, page:page, length:rows.length-1,page_num:10,pass:true})
24 }) 37 })
25 } 38 }
...@@ -27,17 +40,23 @@ router.get('/list/:page', function(req, res, next) { ...@@ -27,17 +40,23 @@ router.get('/list/:page', function(req, res, next) {
27 40
28 router.get('/list', function(req,res,next){ 41 router.get('/list', function(req,res,next){
29 var id = req.user; 42 var id = req.user;
30 - if(!id) res.sendFile(path.join(__dirname, "../../public/login.html")) 43 + if(!id){
44 + console.log(logString+'익명 유저의 게시판 접근을 거부했습니다.')
45 + res.sendFile(path.join(__dirname, "../../public/login.html"))
46 + }
31 else res.redirect('/board/list/1') 47 else res.redirect('/board/list/1')
32 }) 48 })
33 49
34 router.get('/write', function(req,res,next){ 50 router.get('/write', function(req,res,next){
35 var id = req.user; 51 var id = req.user;
36 - if(!id) res.sendFile(path.join(__dirname, "../../public/login.html")) 52 + if(!id){
53 + console.log(logString+'익명 유저의 글쓰기 시도를 거부했습니다.')
54 + res.sendFile(path.join(__dirname, "../../public/login.html"))
55 + }
37 else{ 56 else{
38 var id = req.user.ID; 57 var id = req.user.ID;
39 var nickname = req.user.nickname; 58 var nickname = req.user.nickname;
40 - console.log(req.user.ID+'('+nickname+') 유저가 게시글 작성 중입니다.') 59 + console.log(logString+req.user.ID+'('+nickname+') 유저가 게시글 작성 중입니다.')
41 res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"게시판 글 쓰기"}) 60 res.render('write.ejs', {'ID':id, 'nickname': nickname, title:"게시판 글 쓰기"})
42 } 61 }
43 }) 62 })
...@@ -63,7 +82,7 @@ router.post('/write', function(req,res,next){ ...@@ -63,7 +82,7 @@ router.post('/write', function(req,res,next){
63 if(!idx_) // 글이 없으면 NULL 82 if(!idx_) // 글이 없으면 NULL
64 idx_ = 1; 83 idx_ = 1;
65 84
66 - console.log(req.user.ID+'('+nickname+') 유저가 '+idx_+'번 게시글을 작성했습니다.') 85 + console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx_+'번 게시글을 작성했습니다.')
67 res.redirect('/board/read/'+idx_); 86 res.redirect('/board/read/'+idx_);
68 }); 87 });
69 }) 88 })
...@@ -76,7 +95,10 @@ router.get('/read/:idx', function(req,res,next){ ...@@ -76,7 +95,10 @@ router.get('/read/:idx', function(req,res,next){
76 if(err) console.error(err) 95 if(err) console.error(err)
77 96
78 var id = req.user; 97 var id = req.user;
79 - if(!id) res.redirect('/board/list') 98 + if(!id){
99 + console.log(logString+'익명 유저의 '+idx+'번 게시물 접근을 거부했습니다.')
100 + res.redirect('/login')
101 + }
80 else{ 102 else{
81 var id = req.user.ID; 103 var id = req.user.ID;
82 var nickname = req.user.nickname; 104 var nickname = req.user.nickname;
...@@ -87,7 +109,7 @@ router.get('/read/:idx', function(req,res,next){ ...@@ -87,7 +109,7 @@ router.get('/read/:idx', function(req,res,next){
87 if(err) console.error(err) 109 if(err) console.error(err)
88 }) 110 })
89 111
90 - console.log(req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 보고 있습니다.') 112 + console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 보고있습니다.')
91 res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"글 상세", row:row[0]}) 113 res.render('read.ejs', {'ID':id, 'nickname': nickname, title:"글 상세", row:row[0]})
92 } 114 }
93 }) 115 })
...@@ -104,12 +126,13 @@ router.post('/update', function(req,res,next){ ...@@ -104,12 +126,13 @@ router.post('/update', function(req,res,next){
104 board.query(sql,datas,function(err,result){ 126 board.query(sql,datas,function(err,result){
105 if(err) console.error(err) 127 if(err) console.error(err)
106 if(result.affectedRows==0){ 128 if(result.affectedRows==0){
129 + console.log(logString+req.user.ID+'('+nickname+') 유저의 '+idx+'번 게시글 수정을 거부했습니다.(권한없음)')
107 res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>") 130 res.send("<script>alert('게시글 작성자가 아닙니다.');history.back();</script>")
108 } 131 }
109 else{ 132 else{
110 var id = req.user.ID; 133 var id = req.user.ID;
111 var nickname = req.user.nickname; 134 var nickname = req.user.nickname;
112 - console.log(req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 수정했습니다.') 135 + console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 수정했습니다.')
113 res.redirect('/board/read/'+idx) 136 res.redirect('/board/read/'+idx)
114 } 137 }
115 }) 138 })
...@@ -138,10 +161,12 @@ router.post('/delete', function(req,res,next){ ...@@ -138,10 +161,12 @@ router.post('/delete', function(req,res,next){
138 161
139 var nickname = req.user.nickname; 162 var nickname = req.user.nickname;
140 res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/';</script>"); 163 res.send("<script>alert('게시글이 운영자에 의해 삭제되었습니다.');window.location.href='/board/list/';</script>");
141 - console.log("[Admin] "+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.') 164 + console.log(logString+"[Admin] "+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.')
142 }) 165 })
143 } 166 }
144 else{ // 작성자도, 운영자도 아니면 167 else{ // 작성자도, 운영자도 아니면
168 + var nickname = req.user.nickname;
169 + console.log(logString+req.user.ID+'('+nickname+') 유저의 '+idx+'번 게시글 삭제를 거부했습니다.(권한없음)')
145 res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>"); 170 res.send("<script>alert('게시글 작성자가 아닙니다');history.back();</script>");
146 } 171 }
147 }) 172 })
...@@ -150,7 +175,7 @@ router.post('/delete', function(req,res,next){ ...@@ -150,7 +175,7 @@ router.post('/delete', function(req,res,next){
150 var id = req.user.ID; 175 var id = req.user.ID;
151 var nickname = req.user.nickname; 176 var nickname = req.user.nickname;
152 res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/';</script>"); 177 res.send("<script>alert('게시글이 삭제되었습니다.');window.location.href='/board/list/';</script>");
153 - console.log(req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.') 178 + console.log(logString+req.user.ID+'('+nickname+') 유저가 '+idx+'번 게시글을 삭제했습니다.')
154 } 179 }
155 }) 180 })
156 }) 181 })
......
...@@ -6,6 +6,16 @@ var mysql = require('mysql') ...@@ -6,6 +6,16 @@ var mysql = require('mysql')
6 var passport = require('passport') 6 var passport = require('passport')
7 var LocalStrategy = require('passport-local').Strategy 7 var LocalStrategy = require('passport-local').Strategy
8 8
9 +// 로그용
10 +var today = new Date();
11 +var year = today.getFullYear();
12 +var month = ('0' + (today.getMonth()+1)).slice(-2);
13 +var day = ('0' + today.getDate()).slice(-2);
14 +var hour = ('0' + today.getHours()).slice(-2);
15 +var minute = ('0' + today.getMinutes()).slice(-2);
16 +var second = ('0' + today.getSeconds()).slice(-2);
17 +var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
18 +
9 // database setting 19 // database setting
10 var connection = mysql.createConnection({ 20 var connection = mysql.createConnection({
11 host: 'localhost', 21 host: 'localhost',
...@@ -20,17 +30,18 @@ router.get('/', function(req, res){ ...@@ -20,17 +30,18 @@ router.get('/', function(req, res){
20 var msg; 30 var msg;
21 var errMsg = req.flash('error') 31 var errMsg = req.flash('error')
22 if(errMsg) msg = errMsg; 32 if(errMsg) msg = errMsg;
33 + console.log(logString+'익명의 유저가 로그인 중입니다.')
23 res.render('login.ejs', {'message' : msg}); 34 res.render('login.ejs', {'message' : msg});
24 }) 35 })
25 36
26 passport.serializeUser(function(user, done){ 37 passport.serializeUser(function(user, done){
27 - console.log('passport session save: '+ user.ID + '(' + user.nickname + ')') 38 + console.log(logString+'passport session save: '+ user.ID + '(' + user.nickname + ')')
28 done(null, user) 39 done(null, user)
29 }); 40 });
30 passport.deserializeUser(function(user, done){ 41 passport.deserializeUser(function(user, done){
31 var ID = user.ID; 42 var ID = user.ID;
32 var nickname = user.nickname; 43 var nickname = user.nickname;
33 - console.log('passport session get ID: '+ ID + '(' + nickname + ')') 44 + // console.log('passport session get ID: '+ ID + '(' + nickname + ')')
34 done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할 45 done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할
35 }) 46 })
36 47
...@@ -44,16 +55,16 @@ passport.use('local-login', new LocalStrategy({ ...@@ -44,16 +55,16 @@ passport.use('local-login', new LocalStrategy({
44 55
45 if(rows.length){ // database에 입력한 ID값이 있는가? 56 if(rows.length){ // database에 입력한 ID값이 있는가?
46 if(password == rows[0].password){ // 비밀번호와 확인이 같은가? 57 if(password == rows[0].password){ // 비밀번호와 확인이 같은가?
47 - console.log("알림: "+ ID +"(" + rows[0].nickname + ") 유저 로그인") 58 + console.log(logString+"로그인 알림: "+ ID +"(" + rows[0].nickname + ")")
48 return done(null, {'ID' : ID, 'nickname' : rows[0].nickname}); 59 return done(null, {'ID' : ID, 'nickname' : rows[0].nickname});
49 } 60 }
50 else{ 61 else{
51 - console.log("알림: 잘못된 비밀번호입니다.(시도된 아이디: "+ID+")") 62 + console.log(logString+"로그인 알림: 잘못된 비밀번호입니다.(시도된 아이디: "+ID+")")
52 return done(null, false, {message : '잘못된 비밀번호입니다.'}) 63 return done(null, false, {message : '잘못된 비밀번호입니다.'})
53 } 64 }
54 } 65 }
55 else{ 66 else{
56 - console.log("알림: ID를 찾을 수 없습니다.(시도된 아이디: "+ID+")") 67 + console.log(logString+"로그인 알림: ID를 찾을 수 없습니다.(시도된 아이디: "+ID+")")
57 return done(null, false, {message : 'ID를 찾을 수 없습니다.'}) 68 return done(null, false, {message : 'ID를 찾을 수 없습니다.'})
58 } 69 }
59 }) 70 })
......
...@@ -3,11 +3,24 @@ var app = express() ...@@ -3,11 +3,24 @@ var app = express()
3 var router = express.Router(); 3 var router = express.Router();
4 var path = require('path') 4 var path = require('path')
5 5
6 +// 로그용
7 +var today = new Date();
8 +var year = today.getFullYear();
9 +var month = ('0' + (today.getMonth()+1)).slice(-2);
10 +var day = ('0' + today.getDate()).slice(-2);
11 +var hour = ('0' + today.getHours()).slice(-2);
12 +var minute = ('0' + today.getMinutes()).slice(-2);
13 +var second = ('0' + today.getSeconds()).slice(-2);
14 +var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
15 +
6 router.get('/', function(req, res){ 16 router.get('/', function(req, res){
7 var id = req.user; 17 var id = req.user;
8 - if(!id) res.redirect('/main') 18 + if(!id){
19 + console.log(logString+"익명 유저의 로그아웃 시도를 거부했습니다.")
20 + res.redirect('/main')
21 + }
9 else{ 22 else{
10 - console.log(req.user.ID+"("+req.user.nickname+") 유저가 로그아웃합니다.") 23 + console.log(logString+req.user.ID+"("+req.user.nickname+") 유저가 로그아웃합니다.")
11 req.logout(); 24 req.logout();
12 req.session.save(function(){ 25 req.session.save(function(){
13 res.redirect('/'); 26 res.redirect('/');
......
...@@ -3,13 +3,26 @@ var app = express() ...@@ -3,13 +3,26 @@ var app = express()
3 var router = express.Router(); 3 var router = express.Router();
4 var path = require('path') // 상대경로 4 var path = require('path') // 상대경로
5 5
6 +// 로그용
7 +var today = new Date();
8 +var year = today.getFullYear();
9 +var month = ('0' + (today.getMonth()+1)).slice(-2);
10 +var day = ('0' + today.getDate()).slice(-2);
11 +var hour = ('0' + today.getHours()).slice(-2);
12 +var minute = ('0' + today.getMinutes()).slice(-2);
13 +var second = ('0' + today.getSeconds()).slice(-2);
14 +var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
15 +
6 // main page는 login이 된 상태(세션정보가 있을때만) 접근이 가능하게 하자 -> info에 구현해놓음. 16 // main page는 login이 된 상태(세션정보가 있을때만) 접근이 가능하게 하자 -> info에 구현해놓음.
7 router.get('/', function(req, res){ 17 router.get('/', function(req, res){
8 var id = req.user; 18 var id = req.user;
9 - if(!id) res.sendFile(path.join(__dirname, "../../public/main.html")) 19 + if(!id){
20 + console.log(logString+'익명의 유저가 작업 중입니다.')
21 + res.sendFile(path.join(__dirname, "../../public/main.html"))
22 + }
10 if(id){ 23 if(id){
11 var nickname = req.user.nickname; 24 var nickname = req.user.nickname;
12 - console.log(req.user.ID+'('+nickname+') 유저가 작업 중입니다.') 25 + console.log(logString+req.user.ID+'('+nickname+') 유저가 작업 중입니다.')
13 res.render('main.ejs', {'ID': id, 'nickname': nickname}); 26 res.render('main.ejs', {'ID': id, 'nickname': nickname});
14 } 27 }
15 }); 28 });
......
...@@ -7,14 +7,24 @@ var myinfo = mysql_odbc.init(); ...@@ -7,14 +7,24 @@ var myinfo = mysql_odbc.init();
7 var passport = require('passport') 7 var passport = require('passport')
8 var LocalStrategy = require('passport-local').Strategy 8 var LocalStrategy = require('passport-local').Strategy
9 9
10 +// 로그용
11 +var today = new Date();
12 +var year = today.getFullYear();
13 +var month = ('0' + (today.getMonth()+1)).slice(-2);
14 +var day = ('0' + today.getDate()).slice(-2);
15 +var hour = ('0' + today.getHours()).slice(-2);
16 +var minute = ('0' + today.getMinutes()).slice(-2);
17 +var second = ('0' + today.getSeconds()).slice(-2);
18 +var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
19 +
10 passport.serializeUser(function(user, done){ 20 passport.serializeUser(function(user, done){
11 - console.log('passport session save: '+ user.ID + '(' + user.nickname + ')') 21 + console.log(logString+'passport session resave: '+ user.ID + '(' + user.nickname + ')')
12 done(null, user) 22 done(null, user)
13 }); 23 });
14 passport.deserializeUser(function(user, done){ 24 passport.deserializeUser(function(user, done){
15 var ID = user.ID; 25 var ID = user.ID;
16 var nickname = user.nickname; 26 var nickname = user.nickname;
17 - console.log('passport session get ID: '+ ID + '(' + nickname + ')') 27 + // console.log('passport session get ID: '+ ID + '(' + nickname + ')')
18 done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할 28 done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할
19 }) 29 })
20 30
...@@ -22,7 +32,10 @@ passport.deserializeUser(function(user, done){ ...@@ -22,7 +32,10 @@ passport.deserializeUser(function(user, done){
22 router.get('/', function(req, res){ 32 router.get('/', function(req, res){
23 try{ 33 try{
24 var id = req.session.passport.user.ID; 34 var id = req.session.passport.user.ID;
25 - if(!id) res.redirect('/login') 35 + if(!id){
36 + console.log(logString+'익명 유저의 프로필 접근 시도를 거부했습니다.')
37 + res.redirect('/login')
38 + }
26 39
27 var sql = "select profilemsg, type from userdb where id =?"; 40 var sql = "select profilemsg, type from userdb where id =?";
28 41
...@@ -31,11 +44,12 @@ router.get('/', function(req, res){ ...@@ -31,11 +44,12 @@ router.get('/', function(req, res){
31 var nickname = req.user.nickname; 44 var nickname = req.user.nickname;
32 var type = rows[0].type; 45 var type = rows[0].type;
33 var profilemsg = rows[0].profilemsg; 46 var profilemsg = rows[0].profilemsg;
34 - console.log(req.user.ID+'('+nickname+') 유저가 프로필을 보고있습니다.') 47 + console.log(logString+req.user.ID+'('+nickname+') 유저가 프로필을 보고있습니다.')
35 res.render('profile.ejs', {'ID':id, 'nickname': nickname, 'type': type, 'profilemsg': profilemsg}) 48 res.render('profile.ejs', {'ID':id, 'nickname': nickname, 'type': type, 'profilemsg': profilemsg})
36 }) 49 })
37 } 50 }
38 catch{ 51 catch{
52 + console.log(logString+'익명 유저의 프로필 접근 시도를 거부했습니다.')
39 res.redirect('/login') 53 res.redirect('/login')
40 } 54 }
41 55
...@@ -44,7 +58,10 @@ router.get('/', function(req, res){ ...@@ -44,7 +58,10 @@ router.get('/', function(req, res){
44 router.get('/update', function(req,res){ 58 router.get('/update', function(req,res){
45 try{ 59 try{
46 var id = req.user.ID; 60 var id = req.user.ID;
47 - if(!id) res.redirect('/login') 61 + if(!id){
62 + console.log(logString+'익명 유저의 프로필 수정 시도를 거부했습니다.')
63 + res.redirect('/login')
64 + }
48 65
49 var sql = 'select profilemsg from userdb where id ="'+req.user.ID+'"'; 66 var sql = 'select profilemsg from userdb where id ="'+req.user.ID+'"';
50 67
...@@ -54,11 +71,15 @@ router.get('/update', function(req,res){ ...@@ -54,11 +71,15 @@ router.get('/update', function(req,res){
54 var nickname = req.user.nickname; 71 var nickname = req.user.nickname;
55 var type = req.user.type; 72 var type = req.user.type;
56 var profilemsg = rows[0].profilemsg; 73 var profilemsg = rows[0].profilemsg;
74 + console.log(logString+req.user.ID+'('+nickname+') 유저가 프로필 수정 중입니다.')
57 res.render('profmsgedit.ejs', {'ID':id, 'nickname': nickname, 'type':type, 'profilemsg': profilemsg, 'message':''}); 75 res.render('profmsgedit.ejs', {'ID':id, 'nickname': nickname, 'type':type, 'profilemsg': profilemsg, 'message':''});
58 }) 76 })
59 } 77 }
60 catch{ 78 catch{
61 - if(!id) res.redirect('/login') 79 + if(!id){
80 + console.log(logString+'익명 유저의 프로필 수정 시도를 거부했습니다.')
81 + res.redirect('/login')
82 + }
62 } 83 }
63 }) 84 })
64 85
...@@ -91,15 +112,15 @@ router.post('/update', function(req,res,next){ ...@@ -91,15 +112,15 @@ router.post('/update', function(req,res,next){
91 myinfo.query(sql,datas,function(err,result){ 112 myinfo.query(sql,datas,function(err,result){
92 if(err) console.error(err) 113 if(err) console.error(err)
93 114
94 - console.log(req.user.ID+'('+req.session.passport.user.nickname+') 유저가 프로필을 수정했습니다.') 115 + console.log(logString+req.user.ID+'('+req.session.passport.user.nickname+') 유저가 프로필을 수정했습니다.')
95 - console.log(" 변경전: "+id+"("+req.user.nickname+") "+oldType+" // "+oldProfilemsg) 116 + console.log(" 변경전: "+id+"("+req.user.nickname+") "+oldType+" // "+oldProfilemsg)
96 req.session.passport.user.nickname = nickname; 117 req.session.passport.user.nickname = nickname;
97 - console.log(" 변경후: "+id+"("+nickname+") "+type+" // "+profilemsg) 118 + console.log(" 변경후: "+id+"("+nickname+") "+type+" // "+profilemsg)
98 res.redirect('/profile'); 119 res.redirect('/profile');
99 }) 120 })
100 } 121 }
101 else{ // 다른 유저의 닉네임과 중복되는 경우 122 else{ // 다른 유저의 닉네임과 중복되는 경우
102 - console.log(id+" 유저가 중복된 닉네임으로 변경을 시도했습니다.(시도한 닉네임: "+req.body.nickname+")") 123 + console.log(logString+id+" 유저가 중복된 닉네임으로 변경을 시도했습니다.(시도한 닉네임: "+req.body.nickname+")")
103 res.render('profmsgedit.ejs', {nickname: req.session.passport.user.nickname, profilemsg: oldProfilemsg, message : '중복된 닉네임입니다.'}) 124 res.render('profmsgedit.ejs', {nickname: req.session.passport.user.nickname, profilemsg: oldProfilemsg, message : '중복된 닉네임입니다.'})
104 } 125 }
105 }) 126 })
......
...@@ -6,6 +6,16 @@ var mysql = require('mysql') ...@@ -6,6 +6,16 @@ var mysql = require('mysql')
6 var passport = require('passport') 6 var passport = require('passport')
7 var LocalStrategy = require('passport-local').Strategy 7 var LocalStrategy = require('passport-local').Strategy
8 8
9 +// 로그용
10 +var today = new Date();
11 +var year = today.getFullYear();
12 +var month = ('0' + (today.getMonth()+1)).slice(-2);
13 +var day = ('0' + today.getDate()).slice(-2);
14 +var hour = ('0' + today.getHours()).slice(-2);
15 +var minute = ('0' + today.getMinutes()).slice(-2);
16 +var second = ('0' + today.getSeconds()).slice(-2);
17 +var logString = '['+year+'-'+month+'-'+day+' '+hour+':'+minute+':'+second+'] ';
18 +
9 // database setting 19 // database setting
10 var connection = mysql.createConnection({ 20 var connection = mysql.createConnection({
11 host: 'localhost', 21 host: 'localhost',
...@@ -20,17 +30,18 @@ router.get('/', function(req, res){ ...@@ -20,17 +30,18 @@ router.get('/', function(req, res){
20 var msg; 30 var msg;
21 var errMsg = req.flash('error') 31 var errMsg = req.flash('error')
22 if(errMsg) msg = errMsg; 32 if(errMsg) msg = errMsg;
33 + console.log(logString+'익명의 유저가 회원가입 중입니다.')
23 res.render('register.ejs', {'message' : msg}); 34 res.render('register.ejs', {'message' : msg});
24 }) 35 })
25 36
26 passport.serializeUser(function(user, done){ 37 passport.serializeUser(function(user, done){
27 - console.log('passport session save: '+ user.ID + '(' + user.nickname + ')') 38 + console.log(logString+'passport session save: '+ user.ID + '(' + user.nickname + ')')
28 done(null, user) 39 done(null, user)
29 }); 40 });
30 passport.deserializeUser(function(user, done){ 41 passport.deserializeUser(function(user, done){
31 var ID = user.ID; 42 var ID = user.ID;
32 var nickname = user.nickname; 43 var nickname = user.nickname;
33 - console.log('passport session get ID: '+ ID + '(' + nickname + ')') 44 + // console.log('passport session get ID: '+ ID + '(' + nickname + ')')
34 done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할 45 done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할
35 }) 46 })
36 47
...@@ -46,26 +57,26 @@ passport.use('local-join', new LocalStrategy({ ...@@ -46,26 +57,26 @@ passport.use('local-join', new LocalStrategy({
46 if(err) return done(err); 57 if(err) return done(err);
47 58
48 if(rows.length){ // database에 입력한 ID값이 있는가? 59 if(rows.length){ // database에 입력한 ID값이 있는가?
49 - console.log("알림: 중복된 ID입니다.("+ID+")") 60 + console.log(logString+"회원가입 알림: 중복된 ID입니다.("+ID+")")
50 return done(null, false, {message : '중복된 ID입니다.'}) 61 return done(null, false, {message : '중복된 ID입니다.'})
51 } 62 }
52 else{ 63 else{
53 if(password != req.body.pw_com){ // 비밀번호와 확인이 같지 않은가? 64 if(password != req.body.pw_com){ // 비밀번호와 확인이 같지 않은가?
54 - console.log("알림: 비밀번호가 일치하지 않습니다.(시도 중인 아이디: "+ID+")") 65 + console.log(logString+"회원가입 알림: 비밀번호가 일치하지 않습니다.(시도 중인 아이디: "+ID+")")
55 return done(null, false, {message : '비밀번호가 일치하지 않습니다.'}) 66 return done(null, false, {message : '비밀번호가 일치하지 않습니다.'})
56 } 67 }
57 else{ 68 else{
58 var subqry = connection.query('select * from userDB where nickname=?', [req.body.nickname], function(err, rows_){ 69 var subqry = connection.query('select * from userDB where nickname=?', [req.body.nickname], function(err, rows_){
59 if(err) return done(err); 70 if(err) return done(err);
60 if(rows_.length){ 71 if(rows_.length){
61 - console.log("알림: 중복된 닉네임입니다.("+req.body.nickname+")") 72 + console.log(logString+"회원가입 알림: 중복된 닉네임입니다.("+req.body.nickname+")")
62 return done(null, false, {message : '중복된 닉네임입니다.'}) 73 return done(null, false, {message : '중복된 닉네임입니다.'})
63 } 74 }
64 else{ 75 else{
65 var sql = {ID: ID, password: password, type:req.body.type, nickname:req.body.nickname}; 76 var sql = {ID: ID, password: password, type:req.body.type, nickname:req.body.nickname};
66 var query = connection.query('insert into userDB set ?', sql, function(err, rows){ 77 var query = connection.query('insert into userDB set ?', sql, function(err, rows){
67 if(err) throw err 78 if(err) throw err
68 - console.log("알림: 사용자가 추가되었습니다.(" + ID +", " + req.body.nickname + ")") 79 + console.log(logString+"회원가입 알림: 사용자가 추가되었습니다.(" + ID +", " + req.body.nickname + ")")
69 return done(null, {'ID' : ID, 'nickname' : req.body.nickname}); 80 return done(null, {'ID' : ID, 'nickname' : req.body.nickname});
70 }) 81 })
71 } 82 }
......