NestJS Guards (passport-kakao)

오픈소스·2023년 1월 15일
0

NestJS Boilerplate

목록 보기
4/16
post-thumbnail

https://developers.kakao.com/ 사이트에서 애플리케이션을 등록하는 과정을 생략합니다.

  1. kakao.strategy.ts 파일을 생성한다.

    $ tree
    src
    ├── app.controller.spec.ts
    ├── app.controller.ts
    ├── app.module.ts
    ├── app.service.ts
    ├── auth-kakao
    │   ├── auth-kakao.controller.spec.ts
    │   ├── auth-kakao.controller.ts
    │   ├── auth-kakao.module.ts
    │   └── kakao.strategy.ts
    └── main.ts

    kakao.strategy.ts

    import { PassportStrategy } from '@nestjs/passport';
    import { Strategy } from 'passport-kakao';
    import { Injectable } from '@nestjs/common';
    import { ConfigService } from '@nestjs/config';
    import * as _ from 'lodash';
    
    @Injectable()
    export class KakaoStrategy extends PassportStrategy(Strategy) {
      constructor(private readonly configService: ConfigService) {
        super({
          clientID: configService.get<string>('KAKAO_REST_API_KEY'),
          clientSecret: configService.get<string>('KAKAO_CLIENT_SECRET'),
          callbackURL: configService.get<string>('KAKAO_REDIRECT_URI'),
        });
      }
    
      async validate(accessToken, refreshToken, profile, done) {
        // eslint-disable-next-line @typescript-eslint/no-unused-vars
        const { _raw, _json, ...profileRest } = profile;
        const properties = _.mapKeys(_json.properties, (v, k) => {
          return _.camelCase(k);
        });
    
        const payload = {
          profile: profileRest,
          properties,
          token: {
            accessToken,
            refreshToken,
          },
        };
        done(null, payload);
      }
    }
  2. passport 설치한다.

    $ npm install --save @nestjs/passport passport passport-kakao
    $ npm install --save-dev @types/passport-kakao

    passport-kakao 도입 이전에 autorization_code로 부터 직접 token을 얻어 오던 코드를 삭제하면서, HttpModule을 위한 axios도 제거한다.

    $ npm uninstall @nestjs/axios axios

참고)

0개의 댓글