카카오 SDK 를 이용하여 로그인을 구현하던 중 302 에러가 떴다.
AuthError(statusCode=302, reason=Unknown, response=AuthErrorResponse(error=NotSupportError, errorDescription=KakaoTalk is installed but not connected to Kakao account.))
아래 코드에서 카카오톡이 설치는 되어있어서 loginWithKakaoTalk 을 실행했지만, 계정이 연결 안되어있을 때 로그인이 실패하는 에러였다.
// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (UserApiClient.instance.isKakaoTalkLoginAvailable(mContext)) {
UserApiClient.instance.loginWithKakaoTalk(mContext,callback = callback)
} else {
UserApiClient.instance.loginWithKakaoAccount(mContext, callback = callback)
}
이에 대한 예외처리로, 카카오 계정 로그인을 따로 메소드로 빼주어 302 에러가 날 시에 실행을 시켜주도록 했다.
...
// 카카오톡이 설치되어 있으면 카카오톡으로 로그인, 아니면 카카오계정으로 로그인
if (UserApiClient.instance.isKakaoTalkLoginAvailable(mContext)) {
UserApiClient.instance.loginWithKakaoTalk(mContext,callback = callback)
} else {
loginWithKakaoAccount()
}
...
// 카카오톡 설치 되어있지만, 로그인이 안되어있는 가능성이 있어서 따로 메소드를 빼줘서 예외처리.
private fun loginWithKakaoAccount(){
UserApiClient.instance.loginWithKakaoAccount(mContext, callback = callback)
}
콜백 함수에서 302 에러 일 때 예외처리를 해준다.
// 카카오 로그인 공통 callback 구성
val callback: (OAuthToken?, Throwable?) -> Unit = { token, error ->
if (error != null) {
Log.e(TAG, "카카오계정으로 로그인 실패", error)
if (error.toString().contains("statusCode=302")){
loginWithKakaoAccount()
}
} else if (token != null) {
...
}
}
참고 : https://parkwow.medium.com/kakaotalk-is-installed-but-not-connected-to-kakao-account-5a77bb38d177
https://devtalk.kakao.com/t/loginwithkakaotalk/109827
https://daldalhanstory.tistory.com/292