koa2 jwt實踐中的問題總結

前言

剛學完koa2不久,就想着用koa2這個神器寫個接口玩玩吧,而後寫的過程當中遇到了一些阻礙,特此總結。javascript

引入koa-jwt和jsonwebtoken

咱們先npm i koa-jwt jsonwebtoken前端

安裝完畢後,咱們須要在app.js中引入koa-jwtjava

const koaJwt = require('koa-jwt');web

編寫中間件

第二步咱們須要在app.js中編寫以下代碼npm

app.use(async (ctx, next) => {
  await next().catch((err) => {
    if (err.status === 401) {
      ctx.status = 401;
      ctx.body = {
        data: null,
        message: 'token無效',
        status: false
      };
    } else {
      throw err;
    }
  });
});
app.use(koaJwt({
  secret: 'WFT_DSA'
}).unless({
  path: [/^\/api\/user\/login/, /^\/api\/user\/register/, /^\/api\/user\/getSMS/,/^\/api\/user\/forget/]
}));
複製代碼

koa-jwt給咱們提供了一個unless方法,裏面能夠傳入不須要校驗token的api接口地址,上面咱們傳入了login,register,getSMS,forget這幾個接口地址,那麼也就是說除了這幾個之外的接口koa-jwt都會主動的幫咱們校驗token,若是過時或不存在就直接返回401(app.use)裏面就是咱們寫的401中間件。(這裏的secret是加密時用的密鑰,也就是說要和下面講到的生成jwt裏面的secret保持一致)json

如何生成jwt

咱們在用戶登陸成功時須要給前端返回一個token,那咱們能夠在登陸成功時把用戶的信息存到token加密後傳給前端api

具體代碼: 咱們在user的路由下引入jsonwebtokenapp

const jwt = require('jsonwebtoken');
const secret = 'WFT_DSA';
const gen_token = (info) => {
  return jwt.sign({
    user: info.user,
    id: info.id
  }, secret, {expiresIn: '24h'});
};
複製代碼

這裏咱們設置到期時間是24小時,若是直接寫數字他的單位是秒less

咱們用jwt.sign爲咱們生成了一個token,他的加密密鑰是WFT_DSA這個能夠隨意更改,注意不要泄露出去哦koa

這樣咱們就能夠在咱們想生成token的地方直接調用gen_token方法來生成token 而後用ctx.body返回給前端

結語

到這裏就作好了jwt,固然這裏並無作token過時時自動延期的處理,有興趣的朋友能夠交流交流如何實現自動延期?

感謝各位大佬的閱讀,若是以爲本文還不錯,不妨點個贊👍

相關文章
相關標籤/搜索