카테고리 없음

pbkdF2-password (npm i pbkdf2-password)

Canyi 2022. 11. 23. 11:10

https://www.npmjs.com/package/pbkdf2-password

 

pbkdf2-password

Easy salt/password creation for Node.js, extracted from Mosca. Latest version: 1.2.1, last published: 6 years ago. Start using pbkdf2-password in your project by running `npm i pbkdf2-password`. There are 14 other projects in the npm registry using pbkdf2-

www.npmjs.com

 npm i pbkdf2-password

 

 

hasher 정의

//hasher
var bkpw = require('pbkdf2-password');
var hasher = bkpw();

 

post 에서 hasher({password: req.body.pw }, function(err, pass, salt, hash){ 

 

"function에 있는 hash, salt 위치 반드시 확인" , js가 코드를 순서대로 읽어서  mobile과 password가 바뀔수 있음

 

//회원가입
app.post('/signup', function (req , res) {

    console.log(req.body.id);
    console.log(req.body.pw);
    console.log(req.body.mobile);
    console.log(req.body.country);

    hasher({password: req.body.pw }, function(err, pass, salt, hash){
        console.log('pass:'+ pass);
        console.log('salt:'+ salt);
        console.log('hash:'+ hash);

        let sql = `insert into login (userid, userpw, mobile, country) values(
            "${req.body.id}",
            "${hash}",
            "${salt}",
            "${req.body.country}"
        )`;
    
        conn.query(sql,function (err, rows, fields) {
            if(err){ 
                console.log(err);
            }
            else{
                res.redirect('/login');
            }
        })
    })

 

 

MySqlWebserverPbkdf2.js

const express = require('express');
const app = express();

//app.use : 미들웨어
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended : true}));

app.use('/public', express.static('public'));
//쿠키
const cookieParser = require ('cookie-parser');
app.use(cookieParser());


//세션
const session = require('express-session');
// app.use(session({
//     secret :'1111',
//     resave : false,  //다시 저장안함
//     saveUninitialized : true
// }));



//세션 미들웨어 (session file store)
//const FileStore = require('session-file-store')(session);
// app.use(session({
//     secret :'1111',
//     resave : false,  //다시 저장안함
//     saveUninitialized : true,
//     store: new FileStore()      //FileStore 객체 생성
// }));

//세션 미들웨어 (session file store MySql)
const MySQLStore = require('express-mysql-session')(session);
app.use(session({
    secret :'1111',
    resave : false,  //다시 저장안함
    saveUninitialized : true,
    store: new MySQLStore({             //FileStore 객체 생성
        host : '127.0.0.1',
        port : 3306,
        user : 'root',
        password : 'piaoxin123',
        database : 'node_db'
    })      
}));

//md5 비번 암호화
let md5 = require('md5');

//salt
var salt = 'cscsc329320nd-do323';

//sha256
let sha256 = require('sha256');

//hasher
var bkpw = require('pbkdf2-password');
var hasher = bkpw();

//list.html > list.ejs
app.set('view engine', 'ejs');  

//MySql 
const mysql = require('mysql');
const conn = mysql.createConnection({
    // host : 'localhost',
    // user: 'root',
    // password : 'piaoxin123',
    // database : 'node_db'
    
    host : '127.0.0.1',
    port: '3306',
    user: 'root',
    password : 'piaoxin123',
    database : 'node_db'
});


//회원가입
//로그인 라우터
app.get('/signup', function (req , res) {
    
    res.render('signup.ejs', {});

})

//회원가입
app.post('/signup', function (req , res) {

    console.log(req.body.id);
    console.log(req.body.pw);
    console.log(req.body.mobile);
    console.log(req.body.country);

    hasher({password: req.body.pw }, function(err, pass, salt, hash){
        console.log('pass:'+ pass);
        console.log('salt:'+ salt);
        console.log('hash:'+ hash);

        let sql = `insert into login (userid, userpw, mobile, country) values(
            "${req.body.id}",
            "${hash}",
            "${salt}",
            "${req.body.country}"
        )`;
    
        conn.query(sql,function (err, rows, fields) {
            if(err){ 
                console.log(err);
            }
            else{
                res.redirect('/login');
            }
        })
    })

    // let sql = `insert into login (userid, userpw, mobile, country) values(
    //     "${req.body.id}",
    //     "${req.body.pw}",
    //     "${req.body.mobile}",
    //     "${req.body.country}"
    // )`;

    // conn.query(sql,function (err, rows, fields) {
    //     if(err){ 
    //         console.log(err);
    //     }
    //     else{
    //         res.redirect('/login');
    //     }
    // })

})

//로그인 라우터
app.get('/login', function (req , res) {
    
    res.render('login.ejs', {});

})

//로그인 post 처리
app.post('/login', function (req , res) {
    
    let userId = req.body.id;
    let userPw = req.body.pw;

    console.log(userId);
    console.log(userPw);

    let sql = "select * from login";
    conn.query(sql, function (err,rows,fields) { 
        if(err){
            console.log(rows.length);
        }
        
        console.log(rows);
        console.log(rows.length);
        //console.log(rows);
        for(let i=0; i<rows.length; i++){

            console.log(rows.length);
            if(rows[i].userid == userId){
        
                return hasher({password: userPw, salt: rows[i].mobile}, function(err,pass,salt,hash){
                    console.log('pass:'+ pass);
                    console.log('salt:'+ salt);
                    console.log('hash:' + hash);

                    if (hash === rows[i].userpw) {
                        req.session.userid = userId;
                        res.redirect('/');
                    }
                    else{
                        res.send('비밀번호가 틀렸습니다.');
                    }
                })
            
            }

        }
    })
})


app.get('/list', (req , res)=> {
    
    let sql = "select * from todo";
    let list = '';
    

    conn.query(sql, function(err, rows, fileds){
    
    if (err) {
        console.log(err);
    }
    else{
    //     for(let i =0; i < rows.length; i++){
    //         list += rows[i].title + ":" + rows[i].curdate + "<br/>";
    //     }
    //     res.send(list);
    console.log(rows);
    res.render("MysqlList.ejs", {posts: rows});
        
}
    })
    
    })

app.listen(8080, function() {
    
    console.log('listening on 8080');

});



//add 경로 post 요청 (write.html)
app.post('/add',(req, res) => {

    console.log(req.body.title);
    console.log(req.body.date);

    let sql = `insert into todo (title, curdate) values(
        ${req.body.title},
        ${req.body.date}
    )`;

    conn.query(sql,function (err, rows, fields) {
        if(err){
            console.log(err);
        }
        else{
            res.redirect('/list');
        }
    })
    
});

app.delete('/delete', function (req , res) {
    
    console.log(req.body);
    req.body._id = parseInt(req.body._id);
    db.collection('post').deleteOne(req.body, function(err,result){
        if(err) return console.log(err);
        console.log('삭제완료');
        res.status(200).send({message:'성공했습니다.'});
    });
    
})

//ejs

app.get('/write', function (req , res) {
    
            res.render('write.ejs', {});
   
})

app.get('/', function (req , res) {
          
            res.render('index.ejs', {});

})


app.get('/detail/:id', (req , res) => {
    console.log('상세페이지:',req.params.id);
    db.collection('post').findOne({_id: parseInt(req.params.id)}, function (err, result){
        if(err) return console.log(err);
        console.log(result);
        res.render('detail.ejs', {data : result});
    })
    
})


app.get('/editor/:id', (req , res) => {
    
    console.log(req.params.id);

    db.collection('post').findOne({_id:parseInt(req.params.id)},function (err, result){

        if(err) return console.log(err);
        console.log(result);
        res.render('editor.ejs', {post : result});
    })
    

})


app.put('/editor', function (req , res) {
    //폼에 담긴 todo 데이터, date 데이터를 가지고 db.collection(post)를 업데이트
    console.log('업데이트가 됩니다.');
    //$set 설정
    db.collection('post').updateOne({_id: parseInt(req.body.id)}, {$set : {todo : req.body.title, date: req.body.date}}, function (err, result){
        if(err) return console.log(err);
        console.log('수정완료');
        res.redirect('/list');
    })
})




//세션 count, temp, logout
app.get('/count', function(req, res) {
    
    if (req.session.count) {
        req.session.count++;
    }
    else{
        req.session.count = 1;
    }
    
    res.send('count :' + req.session.count);
    // req.session.count = 1;
    // res.send('hi session');
})

app.get('/temp', function(req, res) {
    
    // res.send('result' + req.session.count);
    res.send('result' + req.session.userid);
})



//세션 연결 강제로 끊기
app.get('/logout', function(req, res) {
    
    //delete req.session.count;
    delete req.session.userid;
    res.redirect("/");
})