공부하자
[Node] 로그인 구현하기(2) - session 사용하기 본문
로그인 구현하기(1)에서는 사용자가 입력한 값을 DB(mysql)에 저장된 값과 비교했습니다.
로그인 구현하기(2)에서는 로그인한 사용자의 정보를 세션에 저장합니다.
로그인 구현하기(3)에서는 passport-local 인증을 사용할겁니다.
예제를 위한 예제입니다.
이대로 쓰시면 안돼요.
- app_session.js
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 | var express = require('express'); var mysql = require('mysql'); var session = require('express-session'); var MySQLStore = require('express-mysql-session')(session); var bodyParser = require('body-parser'); var ejs = require('ejs'); var crypto = require('crypto'); var dbConfig = require('./dbConfig'); var app = express(); var dbOptions = dbConfig; var conn = mysql.createConnection(dbOptions); conn.connect(); app.set('view engine', 'ejs'); app.set('views', './views'); app.use(bodyParser.urlencoded({ extended: false })); app.use(session({ secret: '!@#$%^&*', store: new MySQLStore(dbOptions), resave: false, saveUninitialized: false })); app.get('/', function (req, res) { if(!req.session.name) res.redirect('/login'); else res.redirect('/welcome'); }); app.get('/login', function(req, res){ if(!req.session.name) res.render('login', {message:'input your id and password.'}); else res.redirect('/welcome'); }); app.get('/welcome', function(req, res){ if(!req.session.name) return res.redirect('/login'); else res.render('welcome', {name:req.session.name}); }); app.get('/logout', function(req, res){ req.session.destroy(function(err){ res.redirect('/'); }); }); app.post('/login', function(req, res) { var id = req.body.username; var pw = req.body.password; var sql = 'SELECT * FROM user WHERE id=?'; conn.query(sql, [id], function(err, results){ if(err) console.log(err); if(!results[0]) return res.render('login', {message:'please check your id.'}); var user = results[0]; crypto.pbkdf2(pw, user.salt, 100000, 64, 'sha512', function(err, derivedKey){ if(err) console.log(err); if(derivedKey.toString('hex') === user.password){ req.session.name = user.name; req.session.save(function(){ return res.redirect('/welcome'); }); } else { return res.render('login', {message:'please check your password.'}); } });//pbkdf2 });//query }); app.listen(3000, function () { console.log('Example app listening on port 3000!'); }); | cs |
- views/login.ejs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Login Page</title> </head> <body> <h1><%= message %></h1> <form action="/login" method="post"> <input type="text" name="username" placeholder="id" /><br /> <input type="password" name="password" placeholder="password" /><br /> <input type="submit" /> </form> </body> </html> | cs |
- views/welcome.ejs
1 2 3 4 5 6 7 8 9 10 11 12 | <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta charset="utf-8"> <title>Welcome Page</title> </head> <body> <h1>Hello, <%= name %></h1> <h2><a href="/logout">logout</a></h2> </body> </html> | cs |
- 실행결과
로그아웃하고, url로 접속을 시도합니다.
login 페이지로 redirect 되는 것을 확인할 수 있습니다.
* 참고
express-session (링크)
express-mysql-session (링크)
예제 코드 다운받기 (링크)
'공부 > Node.js' 카테고리의 다른 글
[Node] 로그인 구현하기(3) - passport.js 사용하기 (0) | 2018.05.14 |
---|---|
[Node] 로그인 구현하기(1) - mysql 연동하기 (0) | 2018.04.25 |
[Node] cookie 사용하기 (0) | 2018.04.23 |
[Node] File System (readFile, writeFile) (0) | 2018.04.19 |
[Node] express 실행하기 (0) | 2018.04.19 |
Comments