2011-03-17 52 views
1

新手的問題回覆:和的NodeJS cryto密碼如何使用Node.js有問題

var crypto = require('crypto'); 

var User = { 
    user1: { name: 'bob', salt: 'randomSalt', password: sha1('mypass', this.salt) } 
}; 

function sha1(pass, salt) { 
    return crypto.createHmac('sha1', salt).update(pass).digest('hex'); 
} 

爲什麼我 console.log(User.user1.password == sha1('mypass', 'randomSalt') //false

回答

4

回答自己:

「經典」 的JavaScript疑難雜症:

的情況下(這)時SHA1從對象調用已經改變。因此,this.salt是「不確定」

+2

你的診斷是正確的,但我覺得你的解釋是有點過。你期望這個''指的是'用戶',但它從來沒有;指向'sha1'的參數中的'this.salt'並不重要,因爲'this.salt'在被傳遞到'sha1'之前被評估。對於'this'來引用'User',你必須調用附加到'User'對象的函數。這是一個很好的教程:http://howtonode.org/what-is-this – 2011-03-17 16:20:07

+0

請注意,沒有辦法在對象上定義屬性,然後在同一對象定義的其他地方引用該屬性。因此,將'password:'位移動到第二行:'User.password = sha1('mypass',User.salt);' – 2011-03-17 16:23:21

0

這應該工作:

var crypto = require("crypto"); 
function sha1(pass, salt) { 
    return crypto.createHmac('sha1', salt).update(pass).digest('hex'); 
} 
var User = { name:'Robin', salt:'mysalt'} 
User.password = sha1('mypass', User.salt); 
// 'cfbc41a870bb7ddd3d7fcc774dd6d2d5850d5340'