kakao / kakao_flutter_sdk

Flutter SDK for Kakao Open API
Apache License 2.0
193 stars 70 forks source link

iOS에서 웹뷰로 로그인시 로그아웃이 안됩니다. #29

Closed serendipity1004 closed 4 years ago

serendipity1004 commented 4 years ago

웹뷰를 사용해서 로그인하면 로그아웃을 해도 계속 기존 로그인했던 계정으로 로그인하려 하네요.

아래 코드 사용해서 로그아웃 하고있습니다.

await UserApi.instance.logout();
j-taks commented 4 years ago

저도 동일한 현상입니다. ios/android 모두 동일한 현상이 발생하네요. logout 처리를 하면, 재로그인시 email/password 입력 화면이 나오지 않고, 기존 계정으로 재 로그인합니다.

CoderSpinoza commented 4 years ago

@serendipity1004 @j-taks

안녕하세요 요 부분은 현재 known issue 이고 #20 에서 따로 트래킹되고 있습니다.

우선 브라우저에서 일어나는 로그인과 카카오 API 로그인의 구분이 필요한데요. 브라우저에서 일어나는 로그인은 카카오 계정 로그인입니다. SDK 에서 실제로 필요한 로그인은 카카오 인증 서버로부터 개발자님 앱 고유의 액세스토큰을 발급받는 로그인인데, 이 액세스토큰을 카카오 계정 혹은 카카오톡 인증 정보를 이용하여 발급받게 됩니다.

  1. 브라우저를 통한 카카오 계정 로그인 -> 카카오 계정 쿠키를 통하여 인증 후 액세스 토큰 발급
  2. 카카오톡을 통한 간편 로그인 -> 카카오톡 인증 정보를 통하여 인증 후 액세스 토큰 발급

SDK 에서 로그아웃의 처리는 저장된 토큰을 삭제하고 카카오 인증서버에서 해당 액세스 토큰을 영구적으로 삭제하는 프로세스를 의미하고 위 2번의 과정을 무효화하는 스텝입니다. 그렇기 때문에 브라우저에 인증 정보는 그대로 남아있는 것이 정상입니다. 개발자님 앱에서만 로그아웃한 것이지 카카오계정 자체를 로그아웃 하는게 아니거든요.

그래서 다른 계정으로 로그인할 수 있는 방법을 제공하기 위해 카카오 해당 팀에서 대응을 준비하고 있습니다. 로그인할 시에 브라우저에서 자동 로그인을 시키지 않고, 한번 유저를 확인하고 로그아웃 및 다른 계정으로 로그인을 할 수 있는 기능을 넣는 것인데요. 이게 지금 카카오 네이티브 SDK 들에는 적용이 되어 있고 flutter sdk 에도 곧 적용될 예정입니다. #20 이슈를 트랙해주시면 될 것 같아요.

j-taks commented 4 years ago

@CoderSpinoza 상세한 안내 감사드립니다.

서비스 상에는 당연히 카카오톡이 설치 되어 있는지 유무를 판단하고, 설치가 안되어있는 경우에만 브라우저를 통한 카카오 로그인 처리를 하도록 개발되어있습니다.

다른 안드로이드 서비스에 카카오 네이티브 SDK를 활용한 로그인 처리도 했었는데, 그때는 이슈가 없던 것들이 kakao_flutter_sdk를 활용해 개발할때만 이슈가 되어 코멘트 달았습니다 ~

일단 다음 업데이트 버전을 기다려야 하겠군요,

지원해주시는 라이브러리들이 개인개발자에게 큰 힘이 됩니다 ~ 사실, UI를 직접 만들고 REST로 전환해야 하는지 고민중에 있었습니다.. 허허

지원 감사합니다.

CoderSpinoza commented 4 years ago

@j-taks

카카오 네이티브 SDK의 경우에는 웹뷰를 사용하기 떄문에 다음과 같은 이유로 해당 이슈가 발생하지 않았습니다.

  1. 2017년까지는 웹뷰의 쿠키를 직접 조작하여 로그아웃 API 호출 시 직접 쿠키를 삭제하였습니다.
  2. 웹뷰 쿠키 조작 코드가 삭제된 후에도 앱의 프로세스 종료 시 쿠키가 지워지기 때문에 항상 재로그인을 요구합니다.

OAuth 2.0 를 통한 로그인을 웹뷰에서 제공하는 부분에 대해서는 보안적인 이슈가 있어서 OS의 기본 브라우저를 이용하여 로그인하는 쪽으로 변경되는 추세입니다. 실제로 지금 베타 버전으로 오픈한 카카오 네이티브 SDK 2.0 같은 경우도 웹뷰를 아예 제거하고 기본 브라우저를 사용하는 방향으로 가고 있습니다. 쿠키를 재사용하고 앱 내에서 브라우저가 실행 되기 때문에 로그인 정보를 재사용하고 사용자 경험을 해치지 않는 방법을 제공할 것으로 예상하고 있습니다.

위에 개선점은 서버에서 처리해줄 수 있는 부분이기 때문에 SDK 는 버전 업을 하지 않으셔도 자동으로 해결이 될 것으로 예상됩니다! 카카오와 커뮤니케이션하여 빠르게 해결이 될 수 있도록 해보겠습니다. :)

CoderSpinoza commented 3 years ago

@serendipity1004 @j-taks

오래 기다리셨습니다. 로그인 시 계정 쿠키가 있더라도 다른 계정으로 로그인할 수 있는 방식을 제공하는 UI가 적용되었습니다. 한번 확인해 주시고 이슈 있으면 알려주세요!

KakaoTalk_Photo_2020-10-16-15-24-34
chb1828 commented 3 years ago

@CoderSpinoza

  logout() async {
    await storage.delete(key: "token");
    await UserApi.instance.logout();
    await AccessTokenStore.instance.clear();
  }

제 경우에 위 그림의 형식으로 나타나지 않습니다. 바로 로그인이 되는데 웹뷰의 쿠키를 지울 수 있는 방법이나 해결방법이 있을까요??

CoderSpinoza commented 3 years ago

@chb1828 지금 어떤 버전 사용하고 계신가요?

chb1828 commented 3 years ago

@CoderSpinoza Flutter Version Flutter (Channel stable, 1.20.4, on Microsoft Windows [Version 10.0.19041.685], locale ko-KR) kakao Flutter Sdk Version kakao_flutter_sdk: ^0.4.2 을 사용 중이며 에뮬레이터는 아래 그림과 같습니다 캡처

chb1828 commented 3 years ago

@CoderSpinoza 문제를 해결했습니다. 확인결과 flutter sdk를 1.22.4 버전으로 변경하고
kakao_flutter_sdk: ^0.5.2 로 버전을 올리면 제대로 작동 했습니다! flutter sdk 1.20.4 버전에서는 kakao_flutter_sdk: ^0.5.2 버전이 작동하지 않아 변경했습니다.