NestJS - 3. JWTによるログイン


バックエンドロジックをNestとtsに正式に組織します.どんなプロジェクトを行っても、JWTを使用して最も基本的な機能であるログイン機能を実装してみます.
JWTとは何かについては、リファレンスの記事を参照してください.(タグダウンロードとHTMLを組み合わせて...)

1.JWTパッケージの準備


必要なパッケージに関連するコマンドの取得
npm i --save @nestjs/passport passport passport-local
npm i --save-dev @types/passport-local
npm i --save @nestjs/jwt passport-jwt
npm i --save-dev @types/passport-jwt
次にauthモジュールとサービスを作成し、検証ロジックを追加します.
nest g mo auth
nest g s auth

2.設計登録JWT


JWTを使用してログインする手順を以下に示します.

リファレンス


JWTはHeader、Payload、Signitureからなる.
  • ヘッダ:base 64に符号化されたtokenタイプとアルゴリズム
  • Payload:base 64符号化データ(キー値)、ユーザ情報
  • を含む
  • 署名:Header/Payloadを組み合わせて秘密鍵で署名します.base 64として符号化される.
  • したがって、ログイン認証プロセスは次のようになります.
    1.ユーザから送信された要求のメールがデータベースに存在するかどうかを確認する
    2.アカウントのパスワードと要求のパスワードが正しいことを確認する
    3.ユーザのemailとアカウント情報を秘密鍵で署名して発行する

    3.ログインJWTの実装


    GitHubを参照
    後で追加します

    4.Dependency Injection


    Account ModuleはAuthモジュールを参照する必要があり、AuthもAccountを参照する必要があります.
    ->ループ参照に注意してください.
    循環参照エラーログ
    "Nest cannot create the module instance"
    auth.module.ts
    
    ...
    imports: [
    	...
    	forwardRef(() => AccountModule),
    ],
    ...
    このようにforwardRefを使用すると、ループ参照を防止できます.( https://jakekwak.gitbook.io/nestjs/fundamentals/circular-dependency )

    5.「」を参照してください。


    JWTコンテンツ:https://hudi.blog/self-made-jwt/


    最近の公式文書:https://docs.nestjs.com/security/authentication


    GitHub repo: https://github.com/cyw320712/NESTJS-A-TO-Z