2015-06-11 65 views
0

我使用passport-local-mongoose將我的用戶數據存儲在MongoDB中。如果用戶忘記了密碼,我需要重新輸入密碼。它存儲在鹽場。我怎樣才能擺脫鹽?蒙古護照本地:回收密碼

P.S.不能使用bcrypt,因爲它不適用於節點> 0.10.x

+1

你應該更願意讓用戶**重置密碼**自己。 – laggingreflex

+0

我需要重新設置通行證並在電子郵件上發送新通行證? –

+0

請查看:[如何在Node.js中實現密碼重置](http://sahatyalkabov.com/how-to-implement-password-reset-in-nodejs/)。它使用bcrypt,但你可以選擇任何其他的,基本的想法是**創建一個令牌**,通過電子郵件發送給他們,讓他們回來並自己重新創建另一個密碼。 – laggingreflex

回答

1

任何將密碼轉回其原始文本的形式不僅是不安全的,而且存儲它的鹽味散列的全部要點是首先讓困難/不可能。

相反,您要做的是發送/通過電子郵件發送給用戶一個密碼重置鏈接,以便他們可以自己重新創建新密碼。

它基本上需要創建一個通過電子郵件發送給用戶的唯一令牌。您還將該令牌存儲到用戶對象以便稍後驗證。事情是這樣的(僞代碼):

app.post('/reset-password', function(req, res){ 
    var email = req.body.email; // you had the user enter their email 
    User.findByEmail(email, function(err, user){ 
     user.token = new Token(); // some library to create a token 
     mail(user.email, 'Please visit http://example.com/reset-password/' + user.token); 
    }); 
}); 

因此,當用戶獲取電子郵件和訪問http://example.com/reset-password/xxxxxxxx您可以驗證與該令牌用戶,讓他們創建一個新的密碼。

app.post('/reset-password/:token', function(req, res){ 
    var token = req.params.token; 
    var password = req.body.password; // you had the user enter a new password 
    User.findByToken(token, function(err, user){ 
     user.hash = new HashFromPassword(password); // some function to create hash from password; 
    }); 
}); 

因此,您現在已經成功地重置了用戶的密碼。

更多實施細節結帳這篇文章:How To Implement Password Reset In Node.js

+0

太棒了!多謝,夥計 –