해결된 질문
작성
·
467
·
수정됨
0
제 본인 프로젝트에 해당되는 내용입니다.
구글인증까지는 무난하게 되는데요.
1. 파란색이 Entity() 에서 뽑아온 Column명에 해당하는 변수로 알고 있습니다.
2. 구글인증을 통과한 후에 name, email, password를 req.user로 넣어서 보내주는 걸로 알고 있습니다.
<질문의도>
name, email, password를 req.user객체에 넣어서 받았으니,
req.user.name,
req.user.email,
req.user.password,
데이터를 꺼내서 개별적으로
컬럼에 저장되는 변수에
userName = req.user.name
userEmail = req.user.email
userPassword = req.user.password
위와 같이 저장되어야 하지 않아 생각해 봅니다.
그런데 아래 오류메시지의 경우
<property 'email' does not exist on type 'User & Pick<User, userEmail, userName, userPassword>
↑
왜(why) req.user에서 userEmail, userName,
userPassword를 찾고 있는지 이해가 가지 않습니다.
----------------------------------------------------------
제가 지금 머릿속에서 뭔가 꼬인 것 같습니다.
답변 부탁드릴께요.
진도를 못나가고 있어요ㅠ
답변 1
1
안녕하세요 똑같이썼는데안돼님!
질문해 주신 내용에 대한 이해에 도움이 될 수 있도록 해당 코드의 로직을 되짚어 보도록 하겠습니다!
말씀해 주신 것처럼 파란 밑줄이 그어진 interface
는 entity
를 기준으로 하여 필요한 타입을 가져와 새로운 interface
를 만들어 준 것입니다.
우리는 그렇게 만들어진 interface
를 아래와 같은 코드를 통해 strategy
를 거쳐 받아와지는 req
의 타입에도 추가해 주었죠?
@Req() req: Request & IOAuthUser,
즉, req
로 받아와지는 객체에도 user Entity
에서 우리가 뽑아온 타입과 동일한 타입이 지정되어 있기 때문에 strategy
내부에서 return
해주는 객체의 key
들을 우리가 pick 타입으로 뽑아온 이름(userEmail...)
으로 수정해 주실 필요가 있어 보입니다!
이러한 내용을 짚어본 뒤 아래의 에러 메세지를 다시 살펴보면,
<property 'email' does not exist on type 'User & Pick<User, userEmail, userName, userPassword>
우리가 만들어준 pick 타입 내부에는 'email'이 존재하지 않는다. 라는 메세지를 나타내고 있음을 알 수 있습니다!
학습자료로 제공된 노션의 Section 9 => 소셜 로그인
자료를 살펴보시면 이해에 도움이 되리라 생각됩니다!
감사합니다 :)