1.0 jwt思路
- 使用者輸入使用者名稱和密碼登入,如果使用者名稱和密碼正確的話,使用 jsonwebtoken.sign() 生成 token,並返回給客戶端。
- 客戶端將token儲存在本地儲存,在每次的 HTTP 請求中,都將 token 新增在 HTTP Header Authorazition: Bearer token 中。
- 然後後端每次去驗證該token的正確與否。只有token正確後才能訪問到對應的資源。
1.1 安裝依賴
cnpm install jsonwebtoken --save
複製程式碼
1.2 配置jwt的secret(金鑰)
config\config.default.js
config.jwt = {
secret: '我是金鑰',
};
複製程式碼
1.3 使用者登入,根據userId
儲存jwt
app\controller\home.js
async jwt() {
const { ctx } = this;
const userId = '123456';
const result = await ctx.service.jwt.signJwt(userId);
const data = await ctx.service.jwt.verifyJwt(result);
ctx.body = data;
}
複製程式碼
1.4 sign簽名
- 第一個引數,要加密的資料
- 第二個引數,加密的金鑰
- 第三個引數,物件,過期時間
async signJwt(userId) {
const { ctx } = this;
const token = jwt.sign({ userId }, this.config.jwt.secret, {
expiresIn: 60,
});
return token;
}
複製程式碼
1.5 verify檢驗`
async verifyJwt(token) {
const { ctx } = this;
try {
let hasToken = false;
const userId = jwt.verify(token, this.config.jwt.secret).userId;
console.log(userId);
if (userId == '123456') {
hasToken = true;
return hasToken;
}
return hasToken;
} catch (err) {
throw (err);
}
}
複製程式碼