이 문서는 카카오 로그인에 대해 자주 묻는 질문과 답변을 제공합니다.
에러 발생 시 응답의 에러 메시지로 원인을 알 수 있습니다. 주로 처음 카카오 로그인을 구현하고 인가 코드 받기를 요청했을 때, "Invalid redirect" 에러가 발생하는 경우가 많습니다.
...error="invalid_grant", error_description="Invalid redirect:...
해당 에러 메시지를 보면 '올바르지 않은 redirect_uri'라는 문구가 있습니다. 이 에러는 인가 코드 발급 요청 시 전달된 redirect_uri
가 앱 정보에 등록된 값과 다를 때 발생합니다. Redirect URI 등록을 참고해 실제 카카오 로그인 절차를 수행하는 웹 페이지 등의 OAuth Redirect URI
를 입력해야 합니다. 이미 Redirect URI 등록을 했다면, 에러 메시지를 통해 요청 시 파라미터로 전달된 redirect_uri 값을 확인하여 등록된 값과 일치하는지 비교합니다.
이 밖에도 API 호출 시 주로 발생하는 에러는 에러 코드와 메시지가 명시되어 있습니다. 에러 유형은 각 플랫폼 레퍼런스에서 참고할 수 있습니다. 카카오 로그인 중 발생한 에러는 문제 해결을 참고합니다.
로그인 버튼을 눌렀을 때 카카오톡으로 이동하며 간편로그인을 할 수 있어야 하는데, 카카오계정 정보 입력 화면이 나타난다면 인증 유형(Auth Type) 설정을 했는지 확인합니다.
카카오 로그인은 인증 유형에 따라 다르게 동작합니다. 다음과 같은 인증 유형이 있습니다.
REST API를 사용할 때는 카카오계정 및 비밀번호로만 사용자 인증이 가능합니다. JavaScript SDK를 사용하면 다음과 같은 옵션이 제공됩니다.
플랫폼 | 파라미터 | 설명 |
---|---|---|
JavaScript | throughTalk | 카카오톡 간편로그인 사용 여부, Boolean |
위 옵션은 서비스 상황에 따라 인증 유형을 지정할 수 있도록 제공됩니다. SDK에서는 옵션마다 인증 수단 실행 경로가 상수로 지정돼 있으므로, 별도 지정이 필요하지 않습니다.
모바일 웹에서 카카오톡 로그인 시 해당 현상이 발생한다면 정상 동작입니다. 스마트폰 OS 정책에 따라 앱에서 임의로 다른 앱을 불러올 수 없습니다. 사용자가 직접 서비스 웹 페이지(브라우저)로 돌아가야만 합니다. 카카오톡 로그인 화면에서도 안내 문구를 보여줍니다. 서비스 페이지로 이동했을 때 로그인이 완료된다면 기능이 정상 동작하는 것입니다.
웹 브라우저의 경우, 로그인한 사용자의 정보가 회원 정보에 잘 저장되어 있고 로그인 시 올바르게 불러와지는지 확인합니다. 로그인 후 사용자 정보를 호출해 회원번호(user id)를 받은 뒤, 이 정보로 서비스 회원 정보에서 해당 사용자의 정보를 불러오는 부분에 이상이 없어야 합니다.
네이티브 앱의 경우, 카카오 로그인 인증 정보는 토큰으로 관리됩니다. 토큰은 실제 인증을 담당하는 액세스 토큰, 액세스 토큰 만료 시 간편하게 재발급 받을 수 있도록 해 주는 리프레시 토큰 두 가지가 있습니다. 사용자가 로그아웃을 하지 않았다면, 일정 기간 내 다시 로그인했을 때는 액세스 토큰 또는 리프레시 토큰을 사용해 로그인할 수 있습니다. 토큰 유효 기간 동안은 다시 카카오톡이나 카카오계정으로 사용자 정보를 인증할 필요가 없습니다.
위 두 가지 조건을 만족함에도 토큰을 사용한 재로그인이 불가능하다면, 다음과 같이 확인합니다.
사용자 정보 가져오기 API로 필요한 사용자 정보를 제공받지 못했다면 아래 내용을 확인합니다.
true
이면 제공 가능한 정보REST API라면 로그아웃 요청에 사용된 토큰 정보가 올바른지 확인합니다. Kakao SDK 사용 시에는 로그아웃 요청과 함께 토큰과 쿠키가 삭제되기 때문에 함수 호출 결과와 무관하게 실질적인 로그아웃이 이뤄지므로, API 동작 외의 다른 부분에 실패 원인이 있을 가능성이 높습니다.
현재 제공되지 않는 기능입니다. 카카오계정은 여러 기기에서 로그인하는 것(Multi device)을 지원합니다. 따라서 로그아웃 요청은 현재 사용 중인 기기에서만 로그인을 해제하고, 다른 기기의 로그인 상태는 유지됩니다.
로그아웃 처리가 올바르게 완료되지 않았거나, 브라우저에 저장된 쿠키 때문에 발생하는 현상입니다. iOS나 Android SDK 사용 시 정상적으로 로그아웃한 경우 토큰과 쿠키가 모두 지워지고, REST API 사용 시에는 액세스 토큰과 리프레시 토큰이 삭제됩니다. 현재 카카오계정 쿠키는 삭제되지 않으므로 다시 인증을 시도하면 같은 계정으로 로그인될 수 있습니다.
아닙니다. 각 서비스 사용자에게 발급되는 회원번호(user id)는 고유한 값이며 로그아웃이나 탈퇴를 하더라도 변하지 않습니다.
단, 2018년 9월 19일 이전 생성 앱은 연결 끊기 후 재연결 시 회원번호가 변경되도록 설정되어 있을 수 있습니다. 이 경우, [내 애플리케이션] > [카카오 로그인] > [고급]에서 [사용자 아이디 고정]을 활성화하면 회원번호가 변경되지 않습니다.
사용자가 간편가입 시 제공 동의한 항목이라도 값이 비어 있을 수 있습니다. 사용자가 카카오 서비스 이용 중 한 번도 해당 정보를 입력한 적 없는 경우입니다. 이에 대비하여 간편가입 시 제공 동의한 정보가 비어 있을 때, 카카오에서 사용자로부터 해당 정보를 입력 받아 서비스에 제공하는 기능이 있습니다. 사용자 관리의 각 항목에서 카카오계정 정보를 통한 수집 옵션을 설정하면 됩니다.
만약 카카오계정 정보를 통한 수집 옵션이 꺼져 있어서 일부 회원 정보에 누락이 있을 경우, 옵션을 켠 뒤 사용자가 다시 로그인했을 때 정보 입력 과정을 거치게 됩니다. 로그인 후 갱신된 사용자 정보로 회원 정보를 업데이트합니다.
해당 옵션이 켜져 있어도, 사용자가 카카오에 정보 제공을 거부한 항목은 빈 값입니다. 카카오에서도 그 정보를 보유하고 있지 않기 때문입니다. 비어 있는 정보가 서비스 이용에 꼭 필요한 것이라면, 서비스 이용 중 사용자가 직접 정보를 입력하거나 가입을 취소할 수 있도록 해야 합니다.
카카오계정을 통한 수집 옵션을 켜기 전에 사용자가 이미 해당 항목에 대한 제3자 제공 동의를 했다면, 서비스에서 다시 동의 요청을 하더라도 수집과 동의 절차를 거치지 않습니다. 사용자가 연결을 끊은 후에는 다시 카카오계정을 통한 수집 기능이 동작합니다.
특정 동의항목을 [필수 동의]로 설정했더라도, 사용자에게 정보가 없다면 동의 화면에 해당 동의항목이 노출되지 않습니다.
이 경우, 해당 동의항목에 '카카오계정으로 수집 후 제공' 옵션을 설정합니다. '수집 후 제공' 옵션은 카카오 로그인 시 사용자가 해당 동의항목의 정보를 갖고 있지 않다면, 사용자로부터 정보를 입력 받아 동의 화면에서 동의 받을 수 있도록 해 줍니다. 단, 전화번호는 '수집 후 제공' 옵션을 사용할 수 없으므로 유의합니다.
'수집 후 제공' 옵션에 따라 사용자의 정보 입력이 필요할 경우, 사용자는 추가정보 입력 단계를 거쳐 카카오 로그인 동의 화면으로 이동합니다. 아래는 추가정보 입력 단계에서 나타나는 화면의 예시입니다.
사용자마다 고유하게 발급되는 ID나 본인 인증 정보인 CI를 제외하면, 사용자 정보는 항상 변경될 가능성이 있습니다. 로그인 시 사용자 정보 가져오기를 통해 최신 정보로 갱신합니다.
추가 정보 동의 받기 기능을 사용합니다. 사용자가 간편가입 시 선택 항목이어서 제공 동의하지 않은 항목이라도, 해당 정보를 필요로 하는 기능을 사용자가 쓰려고 한다면 다시 정보 제공에 동의할 것인지 물어볼 수 있습니다. 하지만 추가 정보 동의 요청에도 사용자가 거부한디면 해당 기능을 제공하지 않아야 합니다.
카카오가 제공하는 사용자 정보의 종류는 사용자 정보에서 확인할 수 있습니다. 다음은 사용자 정보 제공 조건입니다.
네. 앱에서 어떤 동의항목을 설정했고, 사용자가 어떤 동의항목에 동의했는지 동의 내역 확인하기 API를 통해 확인할 수 있습니다.
혹은 사용자 정보 가져오기 API의 응답을 통해서도 확인할 수 있습니다. 사용자가 동의한 정보와 함께 사용자 동의 시 정보 제공 가능 여부로 추가적인 동의가 필요한 항목을 확인할 수 있습니다.
사용자 이메일 정보가 필요한데 값을 받지 못한 경우라면, 다음 순서로 확인합니다.
email_needs_agreement
값이 true
라면 이메일 정보가 있는 사용자입니다. 이 경우, 추가 항목 동의 받기로 이메일 제공 동의를 받은 후 다시 사용자 정보 가져오기를 요청합니다.이메일 정보를 반드시 제공받아야 한다면 [이메일] 동의항목의 동의 단계를 [필수 동의]로 하고, 카카오계정으로 수집 후 제공을 설정합니다. 설정 후 추가 항목 동의 받기 및 사용자 정보 가져오기를 다시 요청합니다. 이 방법으로도 이메일을 제공받지 못한다면 서비스에서 자체적으로 수집해야 합니다.
카카오계정(전화번호) 동의항목은 수집 후 제공 설정을 사용할 수 없습니다. 전화번호는 카카오계정에 연결된 카카오톡에서 가져오며, 카카오톡을 사용하지 않는 카카오계정인 경우에는 전화번호를 확보할 수 없기 때문입니다. 만약 전화번호가 필수 동의항목으로 설정돼 있음에도 값이 비어 있는 사용자가 있다면, 해당 사용자는 카카오톡을 사용하지 않아 카카오에서 전화번호를 제공할 수 없는 경우입니다. 이 때는 자체적으로 전화번호를 수집 및 저장하여야 합니다.