Rest api 이용한 카카오톡 로그인 구현(ruby on rails)

안녕하세요 Ruby on Rails기반 웹 프로젝트에서 카카오톡 아이디로 로그인하기 기능을 구현하고 있습니다.
https://luciuschoi.gitbooks.io/exploring_devise/content/devise_omniauth/omniauth-twitter.html
해당 링크의 자료를 기반으로 기능을 구현해보고 있는데, redirect_path 문제가 해결되지 않습니다…
gem devisegem omniauth-kakao를 사용하고 있는데, https://developers.kakao.com 에서 redirect_path 설정을 "/", "users/confirmation"등으로 변경해도 계속 redirect가 /oauth로 됩니다…

error="redirect_uri_mismatch", error_description="Invalid redirect: http://snap-hcn1519.c9users.io/oauth does not match one of the registered values. Please check app settings on kakao developer site."

그리고 redirect_path를 /oauth로 설정해놓으면, 카카오톡 로그인 동의가 나오고, 제가 "/oauth"에 해당하는 부분을 구현하지 않아서 오류가 나는 상황입니다.

제가 궁금한 것은 redirect_path를 /oauth로 꼭 설정해놓아야 하는 지 여부입니다. 다른 특정 지점으로(ex root page) rediect 되게 할 수는 없는 것인가요?

@hcn1519 카카오 플랫폼에서는 /oauth 외에도 custom하게 설정이 가능합니다.
아래는 앱의 redirect url을 설정하는 화면입니다.

왠지 omniauth library의 문제이지 않을까 조심스럽게 추측해 봅니다 ㅜㅠ 해당 이슈와 비슷한 이슈를 여기 데브톡에서 본것 같은데…

https://devtalk.kakao.com/t/rest-api/19207/8

해결은 되었는지 잘 모르겠네요.

@michael 저도 같은 문제를 겪고 있습니다.
ruby on rails 에서
다음과 같이 라이브러리를 사용하고 있구요:

gem 'devise'
gem 'omniauth'
gem 'omniauth-kakao'

route 설정은 다음과 같습니다:

Method   Path                                    'Controller#Action'
GET|POST /users/auth/kakao(.:format)             'users/omniauth_callbacks#passthru'
GET|POST /users/auth/kakao/callback(.:format)    'users/omniauth_callbacks#kakao'
  1. 로그인 버튼을 통해 /users/auth/kakao 을 실행해 카카오 로그인 request를 던지게 되고
  2. /users/auth/kakao/callback 을 통해 콜백을 받도록 되어있습니다.

그리고 앱 설정에서 다음과 같이 Redirect Path 에 콜백 을 설정한 후, 저장한 뒤에

REST API 키를 알맞게 넣고, 로그인을 실행하니 다음과 같은 에러가 계속 나타납니다.

에러 메세지는 다음과 같고,

error="redirect_uri_mismatch", error_description="Invalid redirect: http://localhost:3000/oauth does not match one of the registered values. Please check app settings on kakao developer site."

위 에러 페이지 상태에서의 url은 다음과 같습니다.

https://kauth.kakao.com/oauth/authorize?client_id=efe711bdd58203f14bea26fe5fc7483f&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Foauth&response_type=code&state=b614413626e29a5f621f2c9c2301a15861abfca7329280a5

저 페이지에서 주소창 파라미터만 바꿔 redirect_url=http% ...%2Foauth 에서 %2Fusers%2Fauth%2Fkakao%2Fcallback 으로 변경했더니 알맞게 routing 되어 서버로 들어옵니다. (물론 request 정보에 auth 정보는 잃어버린채로 들어오지만)

왜 등록한 redirect path로 가지 않고 계속 /oauth로 호출이 되는 것인지 궁금합니다. 어떻게 해결할 수 있을까요?

해결 되었습니다!
(오랫동안 고민하다 올린 것 치고 너무 금방 해결되어 민망합니다만 같은 문제를 겪는 분들이 계실 것 같아 해결 방법이라도 올립니다)

제 경우에는 devise.rb에서 다음과 같이 key 뒤에 redirect_path를 별도로 명시해주니 해결 되었습니다. :slight_smile:

# config/initializers/devise.rb
config.omniauth :kakao, ENV['KAKAO_REST_API_KEY'], :redirect_path => "/users/auth/kakao/callback"
2개의 좋아요