[Kotlin] 소셜 로그인 API를 이용한 로그인 여러 개 구현하기

Boknami·2023년 6월 9일
0

코틀린

목록 보기
4/19

🤷‍ 왜 굳이 여러 개를?

대부분 내 주위 사람들은 여러 개의 인증이 있다면 대부분 카카오톡을 통해 인증하는 편이다. 그런데도 여러 개의 로그인을 구현하는 이유는 예전 플러터를 이용한 프로젝트에서는 카톡 로그인 API를 이용하여 사용자 이름, 성별, 프로필 등을 불러오고 자동 로그인까지 구현했지만, 이번에는 다른 로그인 API들도 사용하면서 API사용에 대해 익숙해지고 코틀린에 이를 적용하는 과정도 학습하기 위해서이다.

📌 발생했던 오류

1. 카카오톡 로그인 API -> 해시키 오류

autherror(statuscode=401, reason=misconfigured, response=autherrorresponse(error=misconfigured, errordescription=invalid android_key_hash or ios_bundle_id or web_site_url))

https://velog.io/@shin75492/%EC%B9%B4%EC%B9%B4%EC%98%A4%ED%86%A1-API-%EC%97%90%EB%9F%AC%ED%95%B4%EA%B2%B0
에 정리

2. 네이버 자동 로그인 구현

오류
kotlin.uninitializedpropertyaccessexception: lateinit property oauthlogincallback has not been initialized

네이버 자동 로그인에서 헤맨 이유

카카오톡에 경우 카카오톡 디벨로퍼에 토큰 존재 여부 확인하기 라는 부분이 공식 문서에 정리가 되어 있어서 구현하기 편리했다. 하지만 네이버의 경우에는 로그인 과정은 문서에 잘 정리되어 있지만 토큰을 확인하는 부분은 찾을 수 없었다. 서칭을 하다 본 부분에서는 네이버 공식 Q&A 같은 곳에서 자동 로그인 같은 부분은 API를 활용하여 직접 만들어야 한다고 되어있었다.

해당 오류 코드는 oauthlogincallback이 초기화되지 않은 상태에서 코드를 실행했다고 나와있다. 이 부분은 내가 제대로 코드를 작성하지 않았기 때문이다.

나는 xml에 있는 버튼 리스너를 통해 네이버 로그인을 진행하는 것으로 코드를 작성하였다. 그리고 자동 로그인을 구현하기 위해서 onCreate에 naver_autoLogin이라는 함수를 만들고 그 함수를 onCreate밖에 private fun으로 함수를 따로 만들고 그 안에 로그인 로직을 넣고 싶었다.

여기서 착각한 부분이 여럿 있었다.
당연한 부분이 많다. 제대로 공식 문서를 이해하지 않았기 때문이 크다.
1. NaverIdLoginSDK.authenticate(this, oauthLoginCallback)만으로는 로그인 진행이 안된다. 근데 이 부분을 onCreate에 갖다 넣음 당연히 될리가 없다..
2. val oauthLoginCallback = object : OAuthLoginCallback { }
=> 의미를 잘 알자. OAuthLoginCallback의 인스턴스를 생성하고, 객체 표현식을 사용하여 해당 인터페이스의 구현을 정의합니다.

해결

onCreate에 oauthLoginCallback을 초기화 하는 과정을 거치고
성공적으로 인증시에는 액티비티 전환을 한다. 이 때 네이버가 제공해주는 사용자 정보를 다음 액티비티에 넘겨준다.
정상적으로 초기화된 oauthLoginCallback를 이용해NaverIdLoginSDK.authenticate(this, oauthLoginCallback)를 진행!

3.소셜 로그인을 어떻게 DB에..

소셜 로그인을 한 경우 따로 사용자의 정보를 받지 않고 로그인이 가능하다. 그런데 기존 회원가입이 존재하면서 사용자별로 DB에 특정 데이터를 저장하고 있어야 하는 경우라면 이는 매우 곤란해진다.

이에 따른 해결 방안을 고민한 것이
1. 소셜 로그인을 성공 후 간단한 정보를 입력할 수 있는 액티비티를 생성한다.
2. 소셜 로그인을 성공하고 서버에 해당 사용자의 정보와 함께 넣어야 할 데이터는 디폴트 0으로 해서 넣는다.
3. 소셜 로그인에서 사용자를 특정할 수 있는 값을 선정하고 그 값을 통해서 사용자를 식별하고 정보를 저장한다.

자동 로그인들을 구현하는 중이라 3번은 끝나고 선택을 해야할 거 같다.

0개의 댓글