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

kimhecan님의 프로필 이미지
kimhecan

작성한 질문수

배달앱 클론코딩 [with React Native]

토큰 프로세스 관련질문

해결된 질문

작성

·

488

1

안녕하세요 제로초님!

강의를 듣던도중 궁금한 점이 생겨서 질문남깁니다!

제로초님 강의를 기반으로 프로젝트를 만들고 있는데 카카오 로그인 구현에서 고민되는 포인트가 생겼습니다.

https://github.com/react-native-seoul/react-native-kakao-login 라이브러리를 활용하여 login을 하면 accessToken과 refresh 토큰이 오고 getProfile을 하면 동의항목에 체크된 정보들이 앱으로 내려옵니다.

여기서부터 어떻게 토큰기반으로 유저로그인을 해야할지 고민입니다..ㅠ

기존 제로초님 강의들에서 대부분 passport를 활용하여 로그인 전략을 구상하시는데 카카오 로그인 같은 경우는

  1. 앱에서 카카오로그인(native key 사용) -> 프로필정보(email, nickname 등) 받은 후 서버에 전달

    (kakao accessToken, refreshToken은 서버에 보낼 필요 없겠죠? 그렇게다면 이 토큰들은 처음에 유저 정보를 가져오기 위해서만 사용되고 db에 저장된 후에는 사용하지 않는건가요?)

  2. 서버에서 email 확인 후 존재하지 않으면 user 생성 후 토큰 및 리프레시 토큰 전송, 이미 존재하면 바로 토큰 및 리프레시 토큰 전송

이렇게 프로세스가 진행될거 같은데 이 프로세스가 적절한지 궁금하고 서버에서 어떻게 토큰을 만들어야하는지도 궁금합니다..(더미 파일에서는 jsonwebtoken을 사용중이신데 괜찮은지도 궁금합니다)

답변 1

1

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

1 네 카카오 로그인 통해서 이메일만 받으시고 결국 서버쪽에서는 passport-local 태우실 수도 있습니다. accessToken은 kakao api 직접 호출할 때만 필요합니다.

2.서버에 엑세스랑 리프레시 토큰 저장할 필요도 없고 카카오 프로필아이디랑 이메일만 저장하시면 됩니다. 그걸로 디비 비교해서 로그인하시면 되고요.

kimhecan님의 프로필 이미지
kimhecan
질문자

빠른 답변감사합니다 제로초님ㅠㅠ

2번 답변에 대해 추가적인 질문드려도 괜찮을까요?

그렇다면 처음 가입 후 요청을 보낼때마다 유저를 인증할 수 있는 값은 어떻게 관리되어야 하나요?

앱에서는 쿠키가 따로 없어서 authorization 헤더에 토큰을 넣고 그것으로 유저를 판단하는걸로 알고 있어서요!

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

토큰은 직접 생성해서 주셔도 되고요. refreshToken을 서버로 보내서 로그인 토큰으로 쓰셔도 될것같긴 합니다.

kimhecan님의 프로필 이미지
kimhecan
질문자

음 kakao refeshToken보다는 accessToken을 쓰는게 나을거 같은데 이걸 로그인 토큰으로 쓴다면 expiredAt 도 같이 보내서 db에 저장하고 만약 expired가 됐다면 419응답을 보내서 카카오로부터 다시 login을 해 토큰을 받아오는 플로우로 가는게 맞을까요?(또는 예상되는 이슈가 있을까요?)

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

카카오로부터 다시 로그인할 필요는 없긴 합니다. 프로필아이디랑 이메일만 알고 있으면 그 사람을 식별할 수 있습니다. 카카오로그인은 프로필 아이디과 이메일을 주는데서 역할이 끝난 겁니다. 그 후는 제 강좌의 일반 로그인이랑 똑같습니다. 이메일이 아이디 프로필아이이디가 비밀번호라고 생각하세요.

kimhecan님의 프로필 이미지
kimhecan
질문자

그 후는 제 강좌의 일반 로그인이랑 똑같습니다. 이메일이 아이디 프로필아이이디가 비밀번호라고 생각하세요.

답변 감사합니다 제로초님 일반 로그인이라는게 어떤걸 의미하시는건가요? 제가 들었던 강의에서는 보통 웹강의였기 때문에 session과 cookie를 활용했고 passport local 전략이였는데 우선 앱에서는 cookie에서 토큰역할을 하는 값을 넣을 수 없기 때문에(브라우저가 아니라서) passport local에서 deserialize가 가능한지 의문입니다..(대부분의 예시가 웹이라 앱에서 어떻게 적용해야할지 감이 안오네요..ㅠ)

(혹시 카카오를 통해 받은 이메일과 프로필아이디를 통해 토큰을 직접 생성해야한다면 어떻게 생성되고 관리되어야하는지 참고할만한 문서가 있을까요?)

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

아이디와 비밀번호로 로그인해서 토큰을 발급해주는 것을 말한 것입니다. passport-local에서도 쿠키 대신 헤더토큰으로 인증 가능하게 할 수 있는데 살짝 커스텀을 해야 해서 그냥 직접 로그인 구현하시는 게 나을 듯 합니다.

kimhecan님의 프로필 이미지
kimhecan
질문자

네넵 감사합니다! 서버는 node(nest)를 사용할 예정인데 jsonwebtoken라이브러리 토큰 생성 라이브러리로 괜찮을까요?

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

네 저도 그거 씁니다.

kimhecan님의 프로필 이미지
kimhecan

작성한 질문수

질문하기