https://developers.kakao.com/ 사이트에서 애플리케이션을 등록하는 과정을 생략합니다.
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
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);
}
}
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
참고)