Express下采用bcryptjs進行密碼加密

碼農蘇發表於2019-02-16

前幾天利用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
});

相關文章