passport.use(new LocalStrategy(
function(username, password, done) {
var sql = 'SELECT * FROM user WHERE id=?';
conn.query(sql, [username], function(err, results){
if(err)
return done(err);
if(!results[0])
return done('please check your id.');
var user = results[0];
crypto.pbkdf2('password', 'user.salt', 100000, 64, 'sha512', function(err, derivedKey){
if(err)
return done(err);
if(derivedKey.toString('hex') === user.password)
return done(null, user);
else
return done('please check your password.');
});//pbkdf2
});//query
}
));
[Node.js] PBKDF2 비밀번호 암호화하기
Salt란?
비밀번호를 암호화하기 위한 키 값
Digest란?
비밀번호를 Salt로 암호화한 결과 값
crypto.pbkdf2Sync(password, salt, 1, 32, 'sha512').toString('hex')
를 통해 암호화 한다.
app.get('/', function(req,res){
if(!req.user)
res.redirect('/login');
else
res.redirect('/welcome')
});
app.get('/login', function(req,res){
if(!req.user)
res.render('login',{message:'input your id and password.'});
else
res.redirect('/welcome');
});
app.get('/welcome', function(req, res){
if(!req.user)
return res.redirect('/login');
else
res.render('welcome', {name:req.user.name});
});
app.get('/logout', function(req, res){
req.logout();
res.redirect('/');
});
GET 함수를 사용해 호출하고
app.post('/login',
passport.authenticate(
'local',
{
successRedirect: '/welcome',
failureRedirect: '/login',
failureFlash: false
})
);
POST를 사용하여 업데이트 한다.
var express = require('express')
var socket = require('socket.io')
var http = require('http')
var fs = require('fs')
soket 모듈을 호출한다.
app.use('/css', express.static('./chat/static/css'))
app.use('/js', express.static('./chat/static/js'))
css와 js를 따로 폴더로 분류하여 가져온다.
io.sockets.on('connection', function(socket) {
/* 새로운 유저가 접속했을 경우 다른 소켓에게도 알려줌 */
socket.on('newUser', function(name) {
console.log(name + ' 님이 접속하였습니다.')
/* 소켓에 이름 저장해두기 */
socket.name = name
/* 모든 소켓에게 전송 */
io.sockets.emit('update', {type: 'connect', name: 'USER', message: name + '님이 접속하였습니다.'})
})
/* 전송한 메시지 받기 */
socket.on('message', function(data) {
/* 받은 데이터에 누가 보냈는지 이름을 추가 */
data.name = socket.name
console.log(data)
/* 보낸 사람을 제외한 나머지 유저에게 메시지 전송 */
socket.broadcast.emit('update', data);
})
/* 접속 종료 */
socket.on('disconnect', function() {
console.log(socket.name + '님이 나가셨습니다.')
/* 나가는 사람을 제외한 나머지 유저에게 메시지 전송 */
socket.broadcast.emit('update', {type: 'disconnect', name: 'SERVER', message: socket.name + '님이 나가셨습니다.'});
})
})