LoginSignup
6
0

More than 1 year has passed since last update.

NestJSでシンプルなBasic認証

Posted at

1. パッケージをインストール

認証ライブラリのPassport.jsと、Basic認証を使うのに必要なpassport-httpを入れます。

yarn add passport passport-http @nestjs/passport
yarn add -D @types/passport @types/passport-http

2. Basic認証のストラテジーを作成

basic.strategy.ts
import {BasicStrategy as Strategy} from 'passport-http';
import {PassportStrategy} from '@nestjs/passport';
import {Injectable, UnauthorizedException} from '@nestjs/common';

@Injectable()
export class BasicStrategy extends PassportStrategy(Strategy) {
  constructor() {
    super();
  }

  validate(username: string, password: string): boolean {
    if (username === 'admin' && password === 'changeme') return true;
    else throw new UnauthorizedException();
  }
}

(ハードコーディングなので、usernamepasswordはconfigにするなりしたほうがよいでしょう)

3. Basic認証のGuardを作成

AuthGuard('basic')で直接利用できますが、'basic'がMagicStringになるため、Guardにします。

basic-auth.guard.ts
import {Injectable} from '@nestjs/common';
import {AuthGuard} from '@nestjs/passport';

@Injectable()
export class BasicAuthGuard extends AuthGuard('basic') {}

4. Basic認証利用したいモジュールでimportする

Basic認証を利用したいモジュールに、以下のimportsとprovidersを追記してください。

your.module.ts
import {Module} from '@nestjs/common';
import {PassportModule} from '@nestjs/passport';
import {BasicStrategy} from '@strategies/basic.strategy'; // 2で作成したファイル

@Module({
  imports: [PassportModule],
  providers: [BasicStrategy],
})
export class YourModule {}

5. ControllerでBasic認証を利用する

@UseGuards(BasicAuthGuard)のデコレータをつければ完了です。

your.module.ts
import {Controller, Post, UseGuards} from '@nestjs/common';
import {BasicAuthGuard} from '@guards/basic-auth.guard'; // 3で作成したファイル

@Controller('sample')
export class YourController {
  @Post('/test')
  @UseGuards(BasicAuthGuard) // ←これ
  restrictedRoute() {
    return true;
  }
}
6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0