강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của youngkiu0922
youngkiu0922

câu hỏi đã được viết

Mã hóa bản sao Slack [phần backend với NestJS + TypeORM]

bộ nối tiếp cục bộ, bảo vệ

serializeUser가 호출되지 않습니다.

Viết

·

554

0

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

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

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

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

 

 

expressnodejsNestJSTypeORM

Câu trả lời 3

1

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

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

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

0

youngkiu0922님의 프로필 이미지
youngkiu0922
Người đặt câu hỏi

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);
   }

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

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

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

0

youngkiu0922님의 프로필 이미지
youngkiu0922
Người đặt câu hỏi

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

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

@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까지 하셨나요?

Hình ảnh hồ sơ của youngkiu0922
youngkiu0922

câu hỏi đã được viết

Đặt câu hỏi