1.什么是token
token是一個令牌,是前后端開發時的一個驗證工具,(就是一個字符串)
2.token的使用流程
1.前端向后端傳遞用戶名和密碼
2.后端將接收到的的用戶名和密碼進行核實
3.后端核實成功后會,返回給前端一個token(或者直接將token保存在cookie中);
4.前端得到token 並對其進行保存
5.如果前端請求隱私的接口(比如需要登陸后才能查看商品的詳細信息),則需要傳遞保存的token(進行ajax請求時,將信息放在請求頭中)
6.后端對其進行驗證,如果token錯誤,則請求不到數據,返回給前端相應的提示 如果token驗證正確,則 獲取相應的數據,並返回給前端
3.JWT的構成
JWT是由三部分構成,將這三段信息文本用鏈接構成了JWT字符串, header + payload +secret = 加密的字符串
1.header 頭部
2.payload 負載-------寫相關的信息
{
user:"簽發者",
exp:"token過期時間"//必須大於簽發時間
}
3.secret 密鑰------用來進行jwt的簽發和jwt的驗證,它就是你服務端的私鑰,在任何場景都不應該流露出去
4.后端JWT的構建
// 1.下載包 npm install jsonwebtoken --save-dev // 2.引入 var JWT = require("jsonwebtoken");
//負載信息 let payload = { user:"sun", // exp:"1000 * 60"//單位 ms } //密鑰 let secret = "123456";
//生成token,exporesIn為過期時間,單位:ms/h/days/d eg:1000, "2 days", "10h", "7d" let token= JWT.sign(payload,secret,{expiresIn:"1h"})
//將token保存在cookie中 res.cookie("token",token);
5.前端請求保密性的信息(比如:必須登錄后,才能查看商品的詳細信息),發送JWT
//獲取cookie, var token = $.cookie("token"); //發起ajax請求,將token發送到后端 $.ajax({ type: "get", url: "/goods", //將信息保存在請求頭中 headers: { auth: token } })
6.后端驗證JWT
//獲取前端傳來的tokenlet token = req.headers.auth; JWT.verify(token, "密鑰", (err, decoded) => { if (err) { //驗證失敗 //console.log("令牌失效"); res.json({ status:false, info:"令牌失效" }) } else { //驗證成功 //獲取前端需要的相應數據 //返回給前端相應的信息 res.json({ status:true, info:請求的數據 }) } })
參考:https://www.npmjs.com/package/jsonwebtoken