카카오톡 로그인 토큰값이 nil로 들어옵니다

사용중인 SDK
KakaoSDKCommon(2.11.1)
KakaoSDKAuth(2.11.1)
KakaoSDKUser(2.11.1)

안녕하세요!
ios로 카카오톡 로그인을 구현하고 있습니다.
구현하려고 하는 로직은 아래와 같습니다.

  1. 카카오톡으로 로그인 후 받은 토큰 값으로 서비스에 가입된 회원인지 아닌지를 받아옴
  2. 받은 결과 값에 따라서 함수 호출
  3. 만약 서비스에 가입된 회원이 아니라면 카카오 계정으로 로그인을 시도 후 받은 토큰 값으로 서비스에 가입된 회원인지 아닌지를 받아옴
  4. 만약 서비스에 가입된 회원이 아니라면 서비스 회원가입화면으로 전환

현재 상황은 1번에서는 토큰 값을 받아오지만 3번에서는 토큰을 nil로 받아와서 로그인을 실패하고 있습니다.
로그인 실패시 나타나는 오류로그는 아래와 같습니다.

혹시 원인을 알 수 있을까요??

[2022-11-09 21:01:22287 [:bangbang:][AuthController.swift 258:33] → An error occurred on executing authentication session.

reason: related decl ‘e’ for ASWebAuthenticationSessionErrorCode(_nsError: Error Domain=com.apple.AuthenticationServices.WebAuthenticationSession Code=3 “The UIWindowScene for the returned window was not in the foreground active state.” UserInfo={NSDebugDescription=The UIWindowScene for the returned window was not in the foreground active state.})]

앱ID 기재 부탁드려요.

보통 이렇게 처리합니다. 토큰을 저장하고 회원 여부 판단에 사용하시나요?

  1. 카카오로그인
  2. 사용자 정보조회
  3. 앱유저ID로 회원인지 확인
  4. 회원이 아니면 가입 / 회원이면 로그인

담당자가 부재중이어서 앱아이디를 확인이 불가한데 혹시 로직에 문제가 있을까요?
말씀하신대로 토큰으로 회원 여부를 확인하고 있습니다!

토큰은 유효시간 있는 일회성 데이터입니다. 앱유저id로 유저 식별해야합니다.

이와 별개로 토큰이 조회 안되는 것은 로그를 봐야하니 앱ID확인되면 기재 부탁드려요.

앱 id 1581072694입니다!

기재해주신 앱ID는 앱ID가 아닌것 같습니다.

확인을 위해 앱 ID 알려주세요.


앱ID
https://developers.kakao.com/ 의 내 애플리케이션>앱 설정>요약 정보 : 기본정보에 있는 앱 ID
숫자로된 ID 입니다.
ex) 123456

담당자 부재로 지금 말씀드려 죄송합니다! 그리고 이전에 있던 토큰관련건은 제가 잘못이하혹 말씀드린 로직이니 없는 얘기라 생각해주셔도 무방합니다.

현재 문제: 토큰을 처음 받아올 때는 잘 가져오지만 두번째에 가져오면 nil을 준다.

앱 id: 616183

안녕하세요.

현재도 증상이 재현되실까요? 서버측 로그에서는 접근토큰을 정상적으로 발급 받아가시고 있습니다.

네 여전히 토큰값 nil로 로그인 실패하고 있습니다

현재 구현하려는 기능: 먼저 카카오톡으로 로그인, 카카오톡에 로그인 되어있는 계정이 해당 서비스에 미가입시 웹뷰로 카카오계정으로 로그인 유도

해당 문제가 발생되는 시나리오는 아래와 같습니다.(이외에도 발생하는 경우가 있습니다.)
앱 로그인 실패 후 웹뷰로 로그인 성공, 로그아웃 후 다시 로그인 시도 시 해당 문제가 발생합니다.

대체로 카카오톡 로그인 실패후 카카오계정으로 로그인 진행 시 나타나고 있습니다.

알려주신 시나리오에 대해 테스트 후 답변드리겠습니다.


다른이야기지만,
보통은 카카오톡 설치 여부를 먼저 판단하여 웹 로그인 또는 톡 로그인 중 하나만 사용하도록 구현 하는데요
톡 로그인이 미가입 상태인경우 웹뷰로 다시 로그인 시도하는 이유가 어떻게 되실까요?
이미 톡 로그인상태이고 이 상황에서는 접근코드를 갖고 있기에 웹 로그인으로 전환하실 필요가 없어 보이십니다.

아 기능을 말씀드리면서 생략한 부분이 있었네요!

  1. 카카오톡 설치 여부를 판단해서 카카오톡으로 갈지 웹뷰로 갈지 결정합니다.
  2. 카카오톡이 설치되어있다면 카카오톡으로 진행 후 해당 카카오계정이 아닌경우 웹뷰를 띄워줍니다.
    (웹뷰로 다시 시도하는 이유는 카카오톡에 로그인 된 카카오 계정 이외의 다른 카카오 계정으로 가입한 회원을 위해서 띄워주고 있습니다)
  3. 웹뷰로 로그인 후 성공시 앱 메인화면으로 실패시 회원가입 화면으로 넘어갑니다.

혹시 답변 언제가능하신지 말씀해주실 수 있으실까요?

안녕하세요.

답변이 늦어 죄송합니다.
현재 재현이 안되어 계속 확인중에 있습니다.

몇가지 추가 문의 드립니다.

  1. 카카오계정이 아닌 경우는 어떻게 판단하실까요?
  2. 웹뷰로 로그인이라 하면 자체 웹뷰가 아닌 SDK에서 제공하는 웹 로그인을 말씀하시는게 맞으실까요?
  3. 카카오톡 로그인 이후 해당 콜백에서 계정이 아닌경우를 체크 하시고 곧바로 웹 로그인을 호출하시는건가요?
  1. 카카오계정이 아니라는 말씀이 무슨 뜻인지 알 수 있을까요?
    카카오 계정이 해당 서비스에 가입되지 않은 상태를 말씀하시는 것이라면 토큰을 서버에 보내면 서버에서 카카오 서버에 보내서 해당 유저의 정보를 가져옵니다. 만약 서버에서 해당 토큰을 보냈을 때 카카오 서버에서 올바른 값을 보내주지 않는다면 (정보에 nil이 있는 경우) 해당 카카오계정은 서비스에 가입되지 않는 것으로 판단하여 서버에서 response값을 줍니다. (서버담당자가 아니기 때문에 정확한 로직은 말씀드리기 어려우나 추후 해당 답변에 질문이 있으시면 서버 담당자분께 질의드리겠습니다!)

  2. 네 맞습니다.

  3. 우선 카카오 로그인 버튼을 누르면 카카오톡 로그인을 우선으로 합니다.
    해당 카카오 계정이 서비스에 가입되지 않았다는 서버의 API 리스폰스를 받으면 함수가 실행됩니다.
    해당 함수에서는 앱으로 시도했고 로그인에 실패했다는 조건문에 걸려 웹로그인으로 다시 시도합니다. 또한 여기서 다시 로그인을 실패한다면 웹으로 시도했고 로그인에 실패했다는 조건문에 걸려 해당 서비스 회원가입 화면으로 전환됩니다.
    결론은 가입되지 않은 사실을 체크하고 곧바로 웹 로그인을 호출하고 있습니다.

“카카오계정이 아닌 경우는 어떻게 판단하실까요” 라는 문의는 위 내용때문에 드렸었는데요
결국 문의 드리고 싶었던 내용은 서비스에 가입되지 않았다는것을 어떤기준으로 판단하는가 였습니다.

앱 616183의 동의 항목 설정을 보면, 카카오계정(이메일) 만 선택동의로 설정되어 있습니다.
때문에, 서비스 가입여부를 사용자의 이메일로 판단하시는 것 같습니다.

만약 그렇다면, 지금 논의 되고 있는 이슈보다 먼저, 이렇게 개발 되시면 안됩니다.
이메일은 사용자가 동의하지 않을수 있고 동의 하였다 하더라도 언제든지 변경할수 있기에 이를 회원가입 여부와 회원 식별용도로 사용 하셔서는 안됩니다.

이메일이 필수로 필요하신 서비스라면, 해당 동의항목을 필수로 설정하시고 카카오 계정으로 정보 수집 후 제공 옵션을 켜시면(현재 켜져있음) 사용자가 카카오 로그인시 이메일 정보를 반드시 받을수 있습니다.
그리고, 회원식별은 사용자 정보조회 시 반환되는 회원번호(앱유저아이디)를 사용하여야 합니다.

안드로이드도 동일한 서버를 사용하기 때문에 ios와 동일한 로직을 사용하고 문제가 없는 것으로 알고 있습니다! 우선 해당 로직은 서버와 자세히 논의후 다시 말씀드리겠습니다!

해당 로직과는 무관하게 제가 말씀드린 오류가 나타나는 이유는 아직 파악 불가일까요?

재현이 어려운데요 관련 코드를 제공해 주실수 있을까요?
로그인 → 회원가입여부 체크 → 웹로그인 호출 의 코드를 제공해 주시면 재현에 도움이 될것 같습니다.
(공개가 어려우시면 개인 메시지로 부탁드립니다. @woody.ho)

메세지로 보냈습니다

1개의 좋아요