Mukho

Add nickname and Update session

...@@ -43,6 +43,11 @@ ...@@ -43,6 +43,11 @@
43 <div class="invalid-feedback" data-sb-feedback="passwordConfirm:required">비밀번호 확인을 해주세요.</div> 43 <div class="invalid-feedback" data-sb-feedback="passwordConfirm:required">비밀번호 확인을 해주세요.</div>
44 </div> 44 </div>
45 <div class="form-floating mb-3"> 45 <div class="form-floating mb-3">
46 + <input class="form-control" name="nickname" id="nickname" type="text" required minlength='1' maxlength='20' placeholder="nickname" data-sb-validations="required" />
47 + <label for="nickname">닉네임</label>
48 + <div class="invalid-feedback" data-sb-feedback="nickname:required">닉네임을 입력하세요.</div>
49 + </div>
50 + <div class="form-floating mb-3">
46 <select class="form-select" name="type" id="type" aria-label="사용자 유형"> 51 <select class="form-select" name="type" id="type" aria-label="사용자 유형">
47 <option value="작곡가">작곡가</option> 52 <option value="작곡가">작곡가</option>
48 <option value="가수">가수</option> 53 <option value="가수">가수</option>
......
...@@ -20,9 +20,23 @@ sql 사용 파일<br> ...@@ -20,9 +20,23 @@ sql 사용 파일<br>
20 DB 구조(*ID, password, type) -> 형식에 맞게 추가<br> 20 DB 구조(*ID, password, type) -> 형식에 맞게 추가<br>
21 *ID varchar(20), password varchar(20), type varchar(10) // type이 운영자인 경우 서버에서 변경<br> 21 *ID varchar(20), password varchar(20), type varchar(10) // type이 운영자인 경우 서버에서 변경<br>
22 추가된 형식에 맞는 로그인 및 세션 등 변경<br> 22 추가된 형식에 맞는 로그인 및 세션 등 변경<br>
23 +alter table userDB add nickname varchar(20) not null;<br>
24 +
25 +CREATE TABLE `board` (
26 + `idx` int(11) NOT NULL AUTO_INCREMENT,
27 + `name` varchar(50) NOT NULL,
28 + `title` varchar(50) NOT NULL,
29 + `content` mediumtext NOT NULL,
30 + `regdate` datetime NOT NULL,
31 + `modidate` datetime NOT NULL,
32 + `passwd` varchar(50) NOT NULL,
33 + `hit` int(11) NOT NULL DEFAULT '0',
34 + PRIMARY KEY (`idx`)
35 +);
23 36
24 LF 오류시 git config --global core.autocrlf true 입력<br><br> 37 LF 오류시 git config --global core.autocrlf true 입력<br><br>
25 38
26 39
27 -최종 수정: 2021-11-16 18:54<br>
28 -최종 수정 내용: 경로 지정 수정
...\ No newline at end of file ...\ No newline at end of file
40 +최종 수정: 2021-11-17 14:25<br>
41 +최종 수정 내용: 세션에 ID + 닉네임 전달기능 추가
42 +수정 내용: 경로 지정 수정, 제목 추가, userDB, 회원가입에 nickname요소 추가
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -24,12 +24,14 @@ router.get('/', function(req, res){ ...@@ -24,12 +24,14 @@ router.get('/', function(req, res){
24 }) 24 })
25 25
26 passport.serializeUser(function(user, done){ 26 passport.serializeUser(function(user, done){
27 - console.log('passport session save: '+ user.ID) 27 + console.log('passport session save: '+ user.ID + '(' + user.nickname + ')')
28 - done(null, user.ID) 28 + done(null, user)
29 }); 29 });
30 -passport.deserializeUser(function(ID, done){ 30 +passport.deserializeUser(function(user, done){
31 - console.log('passport session get ID: '+ ID) 31 + var ID = user.ID;
32 - done(null, ID); // 세션에서 값을 뽑아서 페이지에 전달하는 역할 32 + var nickname = user.nickname;
33 + console.log('passport session get ID: '+ ID + '(' + nickname + ')')
34 + done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할
33 }) 35 })
34 36
35 passport.use('local-login', new LocalStrategy({ 37 passport.use('local-login', new LocalStrategy({
...@@ -42,8 +44,8 @@ passport.use('local-login', new LocalStrategy({ ...@@ -42,8 +44,8 @@ passport.use('local-login', new LocalStrategy({
42 44
43 if(rows.length){ // database에 입력한 ID값이 있는가? 45 if(rows.length){ // database에 입력한 ID값이 있는가?
44 if(password == rows[0].password){ // 비밀번호와 확인이 같은가? 46 if(password == rows[0].password){ // 비밀번호와 확인이 같은가?
45 - console.log("알림: "+ID+" 유저 로그인") 47 + console.log("알림: "+ ID +"(" + rows[0].nickname + ") 유저 로그인")
46 - return done(null, {'ID' : ID}); 48 + return done(null, {'ID' : ID, 'nickname' : rows[0].nickname});
47 } 49 }
48 else{ 50 else{
49 console.log("알림: 잘못된 비밀번호입니다.") 51 console.log("알림: 잘못된 비밀번호입니다.")
......
...@@ -3,7 +3,7 @@ var app = express() ...@@ -3,7 +3,7 @@ var app = express()
3 var router = express.Router(); 3 var router = express.Router();
4 4
5 router.get('/', function(req, res){ 5 router.get('/', function(req, res){
6 - console.log(req.user+" 유저가 로그아웃합니다.") 6 + console.log(req.user.ID+"("+req.user.nickname+") 유저가 로그아웃합니다.")
7 req.logout(); 7 req.logout();
8 req.session.save(function(){ 8 req.session.save(function(){
9 res.redirect('/'); 9 res.redirect('/');
......
...@@ -5,11 +5,12 @@ var path = require('path') // 상대경로 ...@@ -5,11 +5,12 @@ var path = require('path') // 상대경로
5 5
6 // main page는 login이 된 상태(세션정보가 있을때만) 접근이 가능하게 하자 -> info에 구현해놓음. 6 // main page는 login이 된 상태(세션정보가 있을때만) 접근이 가능하게 하자 -> info에 구현해놓음.
7 router.get('/', function(req, res){ 7 router.get('/', function(req, res){
8 - var id = req.user; 8 + var id = req.user.ID;
9 if(!id) res.sendFile(path.join(__dirname, "../../public/main.html")) 9 if(!id) res.sendFile(path.join(__dirname, "../../public/main.html"))
10 if(id){ 10 if(id){
11 - console.log(req.user, '유저가 작업 중입니다.') 11 + var nickname = req.user.nickname;
12 - res.render('main.ejs', {'ID': id}); 12 + console.log(req.user.ID+'('+nickname+') 유저가 작업 중입니다.')
13 + res.render('main.ejs', {'ID': id, 'nickname': nickname});
13 } 14 }
14 }); 15 });
15 16
......
...@@ -24,12 +24,14 @@ router.get('/', function(req, res){ ...@@ -24,12 +24,14 @@ router.get('/', function(req, res){
24 }) 24 })
25 25
26 passport.serializeUser(function(user, done){ 26 passport.serializeUser(function(user, done){
27 - console.log('passport session save: '+ user.ID) 27 + console.log('passport session save: '+ user.ID + '(' + user.nickname + ')')
28 - done(null, user.ID) 28 + done(null, user)
29 }); 29 });
30 -passport.deserializeUser(function(ID, done){ 30 +passport.deserializeUser(function(user, done){
31 - console.log('passport session get ID: '+ ID) 31 + var ID = user.ID;
32 - done(null, ID); // 세션에서 값을 뽑아서 페이지에 전달하는 역할 32 + var nickname = user.nickname;
33 + console.log('passport session get ID: '+ ID + '(' + nickname + ')')
34 + done(null, {'ID': ID, 'nickname':nickname}); // 세션에서 값을 뽑아서 페이지에 전달하는 역할
33 }) 35 })
34 36
35 passport.use('local-join', new LocalStrategy({ 37 passport.use('local-join', new LocalStrategy({
...@@ -37,6 +39,7 @@ passport.use('local-join', new LocalStrategy({ ...@@ -37,6 +39,7 @@ passport.use('local-join', new LocalStrategy({
37 passwordField: 'password', 39 passwordField: 'password',
38 pwcomField: 'pw_com', 40 pwcomField: 'pw_com',
39 usertypeField: 'type', 41 usertypeField: 'type',
42 + nicknameField: 'nickname',
40 passReqToCallback: true 43 passReqToCallback: true
41 }, function(req, ID, password, done){ 44 }, function(req, ID, password, done){
42 var query = connection.query('select * from userDB where ID=?', [ID], function(err, rows){ 45 var query = connection.query('select * from userDB where ID=?', [ID], function(err, rows){
...@@ -52,11 +55,20 @@ passport.use('local-join', new LocalStrategy({ ...@@ -52,11 +55,20 @@ passport.use('local-join', new LocalStrategy({
52 return done(null, false, {message : '비밀번호가 일치하지 않습니다.'}) 55 return done(null, false, {message : '비밀번호가 일치하지 않습니다.'})
53 } 56 }
54 else{ 57 else{
55 - var sql = {ID: ID, password: password, type:req.body.type}; 58 + var subqry = connection.query('select * from userDB where nickname=?', [req.body.nickname], function(err, rows_){
59 + if(err) return done(err);
60 + if(rows_.length){
61 + console.log("알림: 중복된 닉네임입니다.")
62 + return done(null, false, {message : '중복된 닉네임입니다.'})
63 + }
64 + else{
65 + var sql = {ID: ID, password: password, type:req.body.type, nickname:req.body.nickname};
56 var query = connection.query('insert into userDB set ?', sql, function(err, rows){ 66 var query = connection.query('insert into userDB set ?', sql, function(err, rows){
57 if(err) throw err 67 if(err) throw err
58 - console.log("알림: 사용자가 추가되었습니다.(" + ID +")") 68 + console.log("알림: 사용자가 추가되었습니다.(" + ID +", " + req.body.nickname + ")")
59 - return done(null, {'ID' : ID}); 69 + return done(null, {'ID' : ID, 'nickname' : req.body.nickname});
70 + })
71 + }
60 }) 72 })
61 } 73 }
62 } 74 }
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
12 <div class="container"> 12 <div class="container">
13 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 13 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
14 <div class="user"> 14 <div class="user">
15 - <a> <%= ID %> 님 안녕하세요 </section></a> 15 + <a> <%= nickname %> 님 안녕하세요 </section></a>
16 <a class="btn btn-primary" href="/logout">로그아웃</a> 16 <a class="btn btn-primary" href="/logout">로그아웃</a>
17 </div> 17 </div>
18 </div> 18 </div>
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
21 <div class="container"> 21 <div class="container">
22 <a class="navbar-brand" href="/main">묵호의 놀이터</a> 22 <a class="navbar-brand" href="/main">묵호의 놀이터</a>
23 <div class="user"> 23 <div class="user">
24 - <a> <%= ID %> 님 안녕하세요 </a> 24 + <a> <%=nickname%> 님 안녕하세요 </a>
25 <a class="btn btn-primary" href="/logout">로그아웃</a> 25 <a class="btn btn-primary" href="/logout">로그아웃</a>
26 </div> 26 </div>
27 </div> 27 </div>
......
...@@ -44,6 +44,11 @@ ...@@ -44,6 +44,11 @@
44 <div class="invalid-feedback" data-sb-feedback="passwordConfirm:required">비밀번호 확인을 해주세요.</div> 44 <div class="invalid-feedback" data-sb-feedback="passwordConfirm:required">비밀번호 확인을 해주세요.</div>
45 </div> 45 </div>
46 <div class="form-floating mb-3"> 46 <div class="form-floating mb-3">
47 + <input class="form-control" name="nickname" id="nickname" type="text" required minlength='1' maxlength='20' placeholder="nickname" data-sb-validations="required" />
48 + <label for="nickname">닉네임</label>
49 + <div class="invalid-feedback" data-sb-feedback="nickname:required">닉네임을 입력하세요.</div>
50 + </div>
51 + <div class="form-floating mb-3">
47 <select class="form-select" name="type" id="type" aria-label="사용자 유형"> 52 <select class="form-select" name="type" id="type" aria-label="사용자 유형">
48 <option value="작곡가">작곡가</option> 53 <option value="작곡가">작곡가</option>
49 <option value="가수">가수</option> 54 <option value="가수">가수</option>
......