<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>NestJS on Arch使いの日記</title>
    <link>https://blog.grainrigi.net/tags/nestjs/</link>
    <description>Recent content in NestJS on Arch使いの日記</description>
    <generator>Hugo -- gohugo.io</generator>
    <copyright>Copyright © 2022, grainrigi; all rights reserved.</copyright>
    <lastBuildDate>Tue, 06 Dec 2022 22:06:24 +0900</lastBuildDate><atom:link href="https://blog.grainrigi.net/tags/nestjs/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>NestJS &#43; Passport.jsを使って普通のCookieベースセッションの認証を実装する</title>
      <link>https://blog.grainrigi.net/post/nestjs-passport-session-auth/</link>
      <pubDate>Tue, 06 Dec 2022 22:06:24 +0900</pubDate>
      
      <guid>https://blog.grainrigi.net/post/nestjs-passport-session-auth/</guid>
      <description>
        
          
            NestJS公式でサポートされるアカウント認証フレームワークにPassport.jsがある。 Passport.jsを使った認証の実装は@nestjs/passportというプラグインを使って容易に実装することができ、 公式ガイドのAuthentication | NestJSにはこのプラグインを使って認証を組み込む方法が解説されている。
しかしながら、この公式ガイドで解説されているのはあくまでクライアント側でJWTを使用する方法であり、 いわゆる普通のCookieセッションを使った認証の実装方法は解説されていない。 そこで、本記事ではNestJSとPassport、およびexpress-sessionを使ってCookieセッションを実装する方法を取り上げる。
TL;DR セッションを実装するには以下の点に気をつける必要がある。
セッションを有効化するにはAuthGuard.logInを呼び出す必要があるため、AuthGuardを継承しcanActivate内でsuper.logInを呼び出す セッションデータ(文字列)とユーザーオブジェクトを変換するためにSerializerを実装する(PassportSerializerを継承) 実装手順 セッションベース認証の実装方法は概ね以下のようになる。
自サービスのユーザー認証を呼び出すStrategyを実装(@nestjs/passport/PassportStrategyを継承) 1のStrategyを使って、ログイン認証用のGuardを実装(@nestjs/passport/AuthGuardを継承) express-sessionを設定するModuleを作成 ユーザー情報をセッションデータから復元するSerializerを実装(@nestjs/passport/PassportSerializerを継承) 色々と新しい用語が出てきているが、追って説明する。
前準備: authモジュールの作成 各種実装に先立って、ログイン処理を実装するモジュールとしてauthモジュールを作成する。
1$ nest g mo auth さらに、auth.module.tsを編集してPassportModuleをインポートする。
1import { Module } from &amp;#39;@nestjs/common&amp;#39;; 2import { PassportModule } from &amp;#39;@nestjs/passport&amp;#39;; 3 4@Module({ 5 imports: [PassportModule.register({ session: true })], 6}) 7export class AuthModule {} 1. Strategyの実装 StrategyはPassport.js内で使われる用語で、様々なユーザーの認証手段(ID/PASS認証やOAuth等)を抽象化した概念である。 また、Strategyを実装するための様々なパッケージが公式に提供されている。
今回は典型的なID/PASS認証を提供するStrategyであるpassport-localを使って実装を行う。
まずは必要なパッケージをインストールする。
1$ npm install @nestjs/passport passport passport-local 次に、実際のユーザー・パスワードの照合を行うAuthServiceを作成する。
まずは以下のコマンドでファイルを生成する。
1$ nest g s auth そして、auth.
          
          
        
      </description>
    </item>
    
  </channel>
</rss>
