前幾天利用Express開發(fā)了個小項目替饿,開發(fā)登錄注冊模塊時累驮,采用bcryptjs進行密碼加密圃阳,總結(jié)了一下內(nèi)容:
Express下bcryptjs的使用步驟:
1.安裝bcryptjs模塊
npm install bcryptjs --save
2.在需要加密的模塊中引入bcryptjs庫
var bcrypt = require('bcryptjs');
3.設(shè)置加密強度
var salt = bcrypt.genSaltSync(10);
4.注冊時生成HASH值黑滴,并插入數(shù)據(jù)庫
router.post('/register', function(req, res, next){
// 從連接池獲取連接
pool.getConnection(function(err, connection) {
// 獲取前臺頁面?zhèn)鬟^來的參數(shù)
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值赂乐,并插入數(shù)據(jù)庫
router.post('/login', function(req, res, next){
// 從連接池獲取連接
pool.getConnection(function(err, connection) {
// 獲取前臺頁面?zhèn)鬟^來的參數(shù)
var param = req.query || req.params;
// 建立連接 根據(jù)手機號查找密碼
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
});