인프런 커뮤니티 질문&답변

유영기님의 프로필 이미지
유영기

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

local serializer, guard

serializeUser가 호출되지 않습니다.

작성

·

465

0

아직은 DB를 붙이기 전인데요,

passport-kakao에서 얻어온 ID를 session에 저장하고,
SessionGuard를 만들어서, 여기까지는 동작합니다.

https://github.com/youngkiu/nestjs-kakaologin/blob/main/src/auth/session.serializer.ts

그런데, serializer에 breakpoint를 잡아도 호출되지 않습니다.
도움 부탁드려요.

 

 

답변 3

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

https://github.com/nestjs/nest/issues/1365#issuecomment-494789315

이 사람처럼 Injectable로 만드셔야할 것 같습니다.

0

유영기님의 프로필 이미지
유영기
질문자

Subject: [PATCH] Add Injectable decorator on SessionSerializer
---
Index: src/auth/session.auth.guard.ts
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/auth/session.auth.guard.ts b/src/auth/session.auth.guard.ts
--- a/src/auth/session.auth.guard.ts	(revision 31224c26135ddd183e9b5b6084a1c5cd30183273)
+++ b/src/auth/session.auth.guard.ts	(date 1674003411350)
@@ -5,6 +5,7 @@
 export class SessionAuthGuard extends AuthGuard('session') {
   async canActivate(context: ExecutionContext) {
     const request = context.switchToHttp().getRequest();
+    super.logIn(request);
     return this.validateRequest(request);
   }

이렇게 하고 해결되었습니다. 몇일 해맸는데 정말 감사합니다.

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

아, 네네. extends 한 경우에는 중간에 들어있는 super같은 것 꼭 호출해주셔야 합니다.

0

유영기님의 프로필 이미지
유영기
질문자

@Injectable()을 추가해도,
serializeUser, deserializeUser 함수 안에서 breakpoint가 걸리지 않아요.

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

@Injectable()

export class LocalSerializer extends PassportSerializer {

constructor(

private readonly authService: AuthService,

private readonly userRepository: UserRepository,

) {

super();

}

 

serializeUser(user: User, done: CallableFunction) {

done(null, user.id);

}

 

async deserializeUser(userId: string, done: CallableFunction) {

return await this.userRepository.findOneOrFail({ id: Number(userId) })

.then(user => done(null, user))

.catch(error => done(error));

}

}

이런 식으로 super까지 하셨나요?

유영기님의 프로필 이미지
유영기

작성한 질문수

질문하기