2016-06-30 5 views
0

dbに暗号化値を挿入しようとしましたが、暗号化された値をdbに挿入できない値を暗号化できます。ノードjsの暗号化

app.post('/insert', function (req, res) { 

    // var Fname=req.body.fname; 
    // var Lname=req.body.pwd; 

    var data = { 
     Fname: req.body.fname, 
     Lname: req.body.Lname 
    }; 

    function hashP(getit, cb) { 
     bcrypt.genSalt(15, function (err, salt) { 
      if (err) { 
       return console.log(err); 
      } 
      cb(salt); 
      bcrypt.hash(getit, salt, function (err, gotit) { 
       if (err) throw err; 
       return this.cb(null, gotit); 
      }) 
     }) 
    } 

    hashP(data.Lname, function (err, gotit) { 
     if (err) throw err; 
     data.Lname = hash; 
    }) 

    console.log(data.Lname); 
    con.query("insert into test set ?", [data], function (err, rows) { 
     if (err) throw err; 
     res.send("Value has bee inserted"); 
    }) 
}) 

これは私のHTMLフォームのページです:

<body> 
<form action="http://localhost:8888/insert" method="POST" > 
    <label>Name:</label><input type="text" name="fname"></br> 
    <label>Lname:</label><input type="text" name="Lname"></br> 
    <button type="submit">Submit</button> 
</form> 
</body> 
+0

エラーは何ですか? –

+0

私は、DBに直接挿入されたHTMLフォームから来たデータにエラーはありませんでした。しかし、それは暗号化データとして変換されません。そして私がターミナルをチェックインすると、2つのLname値を取得しています.1つは直接データで、もう1つは暗号化されたデータです。 – chozhan

+0

'hash'はどこにも定義されていないので、これは間違っています:' data.Lname = hash; '代わりに 'gotit'を使用するのですか? – jfriend00

答えて

0

はあなたの関数hashP(getit,cb)のように思えるの悪い時にそれはないcb関数を呼び出していますか?次

別に
function hashP(getit, cb){ 
     bcrypt.genSalt(15, function (err, salt){ 
      if(err) { 
       return cb(err, null); 
      } 
      bcrypt.hash(getit, salt, function (err, hash){ 
       if(err) { 
        return cb(err, null); 
       } 
       return cb(null, hash); 
      }) 
     }) 
    } 

を試してみてください、あなたは次のようにあなたのハンドラ内で呼び出す必要があります:

app.post(...., function(req, res) { 

    var data = { ... } 

    function hashP(data, cb){ ... } 

    hashP(data.Lname, function (err, hash) { 
     if (err) throw err; 
     data.Lname = hash; 
     // NOW, SAVE THE VALUE AT DB 
     con.query("insert into test set ?", [data], function (err, rows) { 
     if (err) throw err; 
     res.send("Value has bee inserted"); 
    }) 
    } 
} 

問題ここ非同期実行だった、あなたは前datacon.queryを呼んでいましたdatahashPから返されます

+0

しかし、データを暗号化してからdbに送る前に、この方法で暗号化が行われるわけではありません。 – chozhan

+0

私は答えを編集しました。それをチェック! – Manu

+0

マックは、そのMACを働いていただきありがとうございます – chozhan