JWT
JSON Web Token (JWT)是一個開放標準(RFC 7519),它定義了一種緊湊的、自包含的方式,用于作為JSON對象在各方之間安全地傳輸信息。該信息可以被驗證和信任,因為它是數字簽名的。
本文只講Koa2 + jwt的使用,不了解JWT的話請到這里)進行了解。
koa環境
要使用koa2+jwt需要先有個koa的空環境,搭環境比較麻煩,我直接使用koa起手式,這是我使用koa+typescript搭建的空環境,如果你也經常用koa寫寫小demo,可以點個star,方便~
安裝koa-jwt
koa-jwt主要作用是控制哪些路由需要jwt驗證,哪些接口不需要驗證:
import * as koaJwt from 'koa-jwt';//路由權限控制 除了path里的路徑不需要驗證token 其他都要app.use( koaJwt({ secret: secret.sign }).unless({ path: [/^//login/, /^//register/] }));上面代碼中,除了登錄、注冊接口不需要jwt驗證,其他請求都需要。
使用jsonwebtoken生成、驗證token
執行npm install jsonwebtoken安裝jsonwebtoken
相關代碼:
import * as jwt from 'jsonwebtoken';const secret = 'my_app_secret';const payload = {user_name:'Jack', id:3, email: '1234@gmail.com'};const token = jwt.sign(payload, secret, { expiresIn: '1h' });上面代碼中通過jwt.sign來生成一個token,
參數意義:
payload:載體,一般把用戶信息作為載體來生成token secret:秘鑰,可以是字符串也可以是文件 expiresIn:過期時間 1h表示一小時在登錄中返回token
import * as crypto from 'crypto';import * as jwt from 'jsonwebtoken';async login(ctx){ //從數據庫中查找對應用戶 const user = await userRespository.findOne({ where: { name: user.name } }); //密碼加密 const psdMd5 = crypto .createHash('md5') .update(user.password) .digest('hex'); //比較密碼的md5值是否一致 若一致則生成token并返回給前端 if (user.password === psdMd5) { //生成token token = jwt.sign(user, secret, { expiresIn: '1h' }); //響應到前端 ctx.body = { token } }}前端攔截器
前端通過登錄拿到返回過來的token,可以將它存在localStorage里,然后再以后的請求中把token放在請求頭的Authorization里帶給服務端。
這里以axios請求為例,在發送請求時,通過請求攔截器把token塞到header里:
//請求攔截器axios.interceptors.request.use(function(config) { //從localStorage里取出token const token = localStorage.getItem('tokenName'); //把token塞入Authorization里 config.headers.Authorization = `Bearer ${token}`; return config; }, function(error) { // Do something with request error return Promise.reject(error); });服務端處理前端發送過來的Token
新聞熱點
疑難解答
圖片精選