Showing
9 changed files
with
158 additions
and
41 deletions
... | @@ -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 | } | ... | ... |
-
Please register or login to post a comment