-
NestJS에서 passport-naver와 passport-kakao 로그인 문제점Nest.js 2024. 7. 25. 13:03728x90
Reference
- (https://github.com/naver/passport-naver)
- (https://github.com/rotoshine/passport-kakao)
- (https://orangebrother.dev/blog/%08nestjs-google-oauth-passport)
- (https://github.com/nestjs/passport/blob/master/lib/passport/passport.strategy.ts)
NestJS에서 naver로그인과 kakao 로그인을 구현 할때 다운로드 수 와 게시글들을 비교 했을때 선택할 수 있는 라이브러리지만 9년전에 만들어 졌고 typescript를 지원하지 않는 라이브러리라 따로 @types를 설치 해주어야 한다.
문제 1 NestJS에서 사용할 때 필요한 타입과 @types/passport-naver로 설치하는 타입과 전혀 연관성이 없다.
@Injectable() export class NaverStrategy extends PassportStrategy(Strategy, 'naver') { constructor() { super({ clientID: process.env.NAVER_CLIENT_ID!, clientSecret: process.env.NAVER_SECRET!, callbackURL: process.env.NAVER_CALLBACK_URL!, }); } validate( accessToken: string, refreshToken: string, profile: string, done: any, ) {} }
super에 어떤값이 들어갈 수 있는지 전혀 추론되지 않는다. 아래에는 @types/passport-naver 타입을 설치한 후 여기서 제공하는 타입이다.
export interface StrategyOption { clientID: string; clientSecret?: string; callbackURL: string; svcType?: number | undefined; authType?: string | undefined; authorizationURL?: string | undefined; tokenURL?: string | undefined; profileURL?: string | undefined; } export interface StrategyOptionWithRequest extends StrategyOption { passReqToCallback: true; }
문제2 @nestjs/passport 사용시 validate 메서드 구현 추론이 안된다.
@Injectable() export class NaverStrategy extends PassportStrategy(Strategy, 'naver') { constructor() { super({ clientID: process.env.NAVER_CLIENT_ID!, clientSecret: process.env.NAVER_SECRET!, callbackURL: process.env.NAVER_CALLBACK_URL!, }); } validate2( accessToken: string, refreshToken: string, profile: string, done: any, ) { done(null); } }
validate2로 이름을 다르게 작성하게되면 아래와 같은 에러가 발생한다.
TypeError: this.validate is not a function
validate 메서드 구현은 필수다.
문제3 validate 메서드에서 req를 가져오고 싶으면 Strategy옵션에서 passReqToCallback옵션을 true로 주어야한다
문서를 보거나 직접 해보지 않으면 validate가 req 파라미터를 사용할 수 있는지 없는지 알 수 가 없다.
결론적으로 @types/passport-naver나 @types/passport-kakao는 NestJS에서 @nestjs/passport와 함께 사용 할 때 아무 도움이 안된다.
NestJS에서 @nestjs/passport와 함께 사용할 수 있도록 오픈소스 라이브러리를 개발하는게 좋아보인다. 소셜 로그인은 자주 사용하니까
728x90'Nest.js' 카테고리의 다른 글
NestJS에서 Decorator(데코레이터) (0) 2024.08.14 NestJS 꼭 알아야 되는 Exception filter 주의점 (0) 2024.08.14 NestJS class-transformer TypeOrm 변환 관련 LifeCycle (0) 2024.07.07 prisma 스키마 관련 라이브러리 (0) 2024.06.28 Nestjs ConfigModule 사용시 환경변수 boolean값을 가져올때 string으로 가져오는 문제 (0) 2024.06.24