前幾天利用Express開發了個小項目,開發登陸註冊模塊時,採用bcryptjs進行密碼加密,總結了一下內容:
Express下bcryptjs的使用步驟:
1.安裝bcryptjs模塊數據庫
npm install bcryptjs --save
2.在須要加密的模塊中引入bcryptjs庫npm
var bcrypt = require('bcryptjs');
3.設置加密強度異步
var salt = bcrypt.genSaltSync(10);
4.註冊時生成HASH值,並插入數據庫post
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值,並插入數據庫ui
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. }); });
密碼驗證:code
bcrypt.compare("B4c0/\/", hash).then((res) => { // res === true });