egg-jwt

遨翔在知識的海洋裡發表於2019-04-29

1.0 jwt思路

  1. 使用者輸入使用者名稱和密碼登入,如果使用者名稱和密碼正確的話,使用 jsonwebtoken.sign() 生成 token,並返回給客戶端。
  2. 客戶端將token儲存在本地儲存,在每次的 HTTP 請求中,都將 token 新增在 HTTP Header Authorazition: Bearer token 中。
  3. 然後後端每次去驗證該token的正確與否。只有token正確後才能訪問到對應的資源。

github

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簽名

  1. 第一個引數,要加密的資料
  2. 第二個引數,加密的金鑰
  3. 第三個引數,物件,過期時間
  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);
    }
  }
複製程式碼

1.6 效果

egg-jwt