一. 使用插件
1. NodeJs自帶的加密插件:crypto
文檔:https://nodejs.org/api/crypto.html
可以用來將用戶密碼加密再存入數據庫
// 隨機生成加密token的密匙,用於jwt加密密匙 let tokenSecret = crypto.randomBytes(16).toString('hex'),
2. 用於生成token的插件:jwt-simple
文檔:https://www.npmjs.com/package/jwt-simple
// 此方式當密鑰不對會解碼失敗得到的值為undefined,可以判斷前端傳來的token是無效的 try { var decoded = jwt.decode(token, tokenSecret); } catch (error) { console.log(error); //=> 輸出:Signature verification failed } console.log(decoded); //=> 輸出:用戶信息 或者 undefined
二. 注冊流程
1. 獲得用戶uid,可以直接使用賬號名,但是要保證唯一性。用戶密碼需要加密之后再存入數據庫
2. 生成新的token(token含用戶id加上密鑰通過加密算法生成)
3. 查詢數據庫是否已經存在此用戶,如果已存在通知前端告知用戶已注冊
4. 否則將用戶信息,加密密碼,token,token過期時間存入數據庫
三. 登錄流程
1. 獲得用戶uid,用戶密碼
2. 生成新的token(token含用戶id加上密鑰通過加密算法生成)
3. 通過uid和密碼查詢數據庫,如果找不到匹配的說明密碼或者用戶名錯了,告訴前端提示用戶
4. 否則找到匹配用戶了,之后更新數據庫token和token過期時間
5. 通過更新數據庫的token返回結果通知用戶是否登錄成功
四. 驗證token流程(方式很多,可以在生成token和設置token過期時間有諸多選擇)
// 我采用生成的token密匙固定,token包含用戶uid,token不重新登錄永不過期,這樣就不用判斷token過期時間了 // token驗證通過上面的jwt.decode此方式可以不用查詢用戶數據庫(也是token存在的意義)
1. 通過前端傳上來的token使用密鑰進行解碼,解碼失敗token無效,通知用戶重新登錄
2. 解碼成功,查詢數據庫此用戶信息
3. 判斷token是否過期,過期驗證失效
4. 沒過期token驗證成功