egg-jwt

2159 ワード

1.0 jwt考え方
  • ユーザーはユーザー名とパスワードを入力してログインし、ユーザー名とパスワードが正しい場合はjsonwebtoken.sign()を使用してtokenを生成し、クライアントに返します.
  • クライアントはtokenをローカルに格納し、HTTPリクエストごとにtokenをHTTPヘッダAuthorazition:Bearer tokenに追加する.
  • その後、バックエンドは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署名
  • 最初のパラメータ、暗号化するデータ
  • 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効果
    転載先:https://juejin.im/post/5cc6a5dee51d456e4b3c6f18