Node.js 5일차

박태욱·2022년 1월 13일
0

패스포트 마무리

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를 사용하여 업데이트 한다.

soket을 사용하여 채팅 구현

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 + '님이 나가셨습니다.'});
    })
  })
profile
개발 노트

0개의 댓글