node 利用crypto進行hash加密和URLSafeBase64處理 (node.js郵箱驗證)
阿新 • • 發佈:2019-02-13
最近用node.js做註冊郵箱驗證時,用到urlBase64位字串:
//實現思路: //1、資料庫表中新增一個啟用的狀態欄位0或1 (0為未啟用,1未啟用),在新增一個驗證碼欄位validateCode,最後在新增一個註冊時間欄位addTime //2、程式中,註冊頁面添加註冊資訊,隨機生成註冊驗證碼新增到資料庫中,越複雜越好,然後對驗證碼進行加密,把使用者id或者UserName // 和加過密的驗證碼作為引數傳送到郵箱中(有的時候只把驗證碼傳送到郵箱,然後找到有沒有匹配的, // 然後修改狀態,我感覺這樣不太好,防止有相同的驗證碼出現,所以最好在加一個引數) //3、傳送到郵箱裡以後,使用者可以點選進行確認,這裡有時間限制,比如48小時之內未能通過註冊,則失效,只能重新註冊,啟用連結只能使用一次,一次後也將失效 //4、處理頁面中,首先驗證連結是否過期,將註冊的時間與當前的時間作比較, // 如果超過時間則提示驗證碼過期,重新註冊或者重新發送驗證碼,然後再判斷連結是否用過, // 只能使用一次,這個只要判斷資料庫中的驗證碼是否為空即可,驗證都通過以後,根據id或userName從資料庫中取回驗證碼與連結中的驗證碼作比較, // 通過了,修改狀態為1,即啟用,然後將註冊碼清空,轉到登陸或者首頁,否則提示驗證失敗! //5 ,為了防註冊機注入,我們要判斷郵箱的唯一性,要不然他們會偽造一個郵箱啟用 //首先利用node.js中的crypto將使用者id進行加密(需要將加密後的值存入資料庫) var sha=crypto.createHash('sha512');//可以用console.log(crypto.getHashes());檢視支援哪些加密方式 var password=sha.update(userid).digest("base64");//將userid加密 //由於加密後的值含有特殊字元,不能直接有做為url在網路中傳輸,故需要將其轉換(這裡需要我用的是:urlsafe-base64 npm) //編碼後的值可以放入url中,在伺服器用郵件發出去 var randomURLSafeBase64 = URLSafeBase64.encode(new Buffer(password,'base64'));//需要先安裝:npm urlsafe-base64 //當用戶點選連結時,將取到的base64字串解碼,並與資料庫中的值比對 var decodeName= URLSafeBase64.decode(randomURLSafeBase64);//編碼 console.log("decodeName:"+decodeName.toString("base64"));//解碼
參考: