前幾天利用Express開發了個小專案,開發登入註冊模組時,採用bcryptjs進行密碼加密,總結了一下內容:
Express下bcryptjs的使用步驟:
1.安裝bcryptjs模組
npm install bcryptjs --save
2.在需要加密的模組中引入bcryptjs庫
var bcrypt = require(`bcryptjs`);
3.設定加密強度
var salt = bcrypt.genSaltSync(10);
4.註冊時生成HASH值,並插入資料庫
router.post(`/register`, function(req, res, next){
// 從連線池獲取連線
pool.getConnection(function(err, connection) {
// 獲取前臺頁面傳過來的引數
var param = req.query || req.params;
/*生成HASH值*/
var hash = bcrypt.hashSync(param.pwd,salt);
// 建立連線 新增使用者
connection.query(userSQL.insert, ["",hash,param.phone,"","","",0], function(err, result) {
res.send(result);
// 釋放連線
connection.release();
});
});
});
5.登入時驗證HASH值,並插入資料庫
router.post(`/login`, function(req, res, next){
// 從連線池獲取連線
pool.getConnection(function(err, connection) {
// 獲取前臺頁面傳過來的引數
var param = req.query || req.params;
// 建立連線 根據手機號查詢密碼
connection.query(userSQL.getPwdByPhoneNumber, [param.phone], function(err, result) {
if(bcrypt.compareSync(param.pwd,result[0].password)){
res.send("1");
connection.query(userSQL.updateLoginStatusById, [1,result[0].id], function(err, result) {
});
}else{
res.send("0");
}
// 釋放連線
connection.release();
});
});
});
以上採用的是bcryptjs的同步用法,下面介紹非同步用法:
生成hash密碼:
bcrypt.genSalt(10, function(err, salt) {
bcrypt.hash("B4c0//", salt, function(err, hash) {
// Store hash in your password DB.
});
});
密碼驗證:
bcrypt.compare("B4c0//", hash).then((res) => {
// res === true
});