Kakao login api REST 로 로그인시 원래 페이지로 돌아가는 방법은?

안녕하세요.

kakao login api REST 사용하고 있습니다.

여기에 redirest url 은 액션을 처리하는 페이지를 지정하는것이지

처리가 완료되고 돌아가는 페이지가 아니잖아요.

사이트를 둘어보다가 특정 페이지(www.a.com/tool/123)에서 kakao login api 을 처리하고 원래 페이지인 특정 페이지(www.a.com/tool/123)로 돌아갔으면 좋겠어서 글을 남깁니다.

좋은 방법이 없을까요?

@wcleeking

카카오 로그인 요청 시 ‘state’ 파라메터를 사용하여,
로그인 완료 후 이동할 주소값을 전달하시거나,
사이트 쿠키를 사용하여 필요하신 기능을 구현하실 수 있습니다.

&state=test

이렇게 념겨주면

redirect_url 페이지에서 안받아지는데
state 값을 어떻게 받는지요?

https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#user-list

여기서 찾아봐도 나오지가 않습니다. ㅠ.ㅠ

@wcleeking

state 파라메터는 /oauth/authorize 요청에서 사용할 수 있습니다.
authorize 요청 시 ‘state’ 파라메터를 추가하였지만,
redirect_uri에서 전달이 되지 않는다는 말씀이신가요?
정확한 확인을 위해 앱이름 또는 앱아이디를 말씀해 주세요.

참고로 아래는 관련내용의 문서 입니다.
https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-code
image

네 전달이 안됩니다.

전체 URL 주소가 뜨는데요.

참고문서는 확인했고 관련해서 어떻게 받는지가 안나와 있어서 나와있지 않다고 하였습니다.

로또이야기 / 98138b4f8448517ff53abafcb9c4e127 입니다.

@wcleeking

카카오 동의창 요청 시 전달하신 ‘state’ 값은 아래와 같으며,
해당 값이 정상적으로 전달된 것 으로 확인됩니다.

www.lottostory.co.kr/lotto_result_detail.php?cate=include&searchYN=Y

받을때

정해진 redirect_uri 에서

state 변수로 받아진다는거죠?

state 값을 표시해보니

www.lottostory.co.kr%2Foauth%3Fcode%3DgORitFQD-y7RMtmK7Uc0KQ0RtjlN9GqrHGUVuxf12dNx3S6oNef65H4E7c3LCk7BV7Fatgo9dJcAAAF2ITIo2g%26state%3Dwww.lottostory.co.kr%252Findex.php

이렇게 나옵니다.

@wcleeking

해당 값 으로 동의창 요청 시,
‘state’ 값을 전달했기 때문에 reidrect_uri에 해당 값 으로 전달되는 것 이에요.

www.lottostory.co.kr/lotto_result_detail.php?cate=include&searchYN=Y
와 값이 다른 이유는 URL Encoding이 되기 때문입니다.

머리가 나뻐서 좀 이해가 안됩니다.
urlencode 안하고 넘겨봤습니다.

예상 state 값)

www.lottostory.co.kr/lotto_result_detail.php?cate=include&searchYN=Y

결과 state 값 )

www.lottostory.co.kr/oauth?code=2pNiLj3vnbapmypdwL6m2nfULC2VquiPu6C1FF_9pyve46WhkWQrHBKPXGD75WfI8T3vfAo9cxgAAAF2IaK0XA&state=www.lottostory.co.kr%2Flotto_result_detail.php%3Fcate%3Dinclude

주소값 전체가 state 변수에 들어간다는겁니다.

물론 짤라서 쓸 수 있습니다만 진짜 이렇게 나오는게 맞는건지 싶어서요.

예상대로

www.lottostory.co.kr%2Flotto_result_detail.php%3Fcate%3Dinclude

이렇게만 나와야 되는거 아닌지요?

@wcleeking

state 파라메터의 값은 서비스에서 그렇게 넣으셨기 때문에,
전체 URL 값이 들어간 것이에요.
카카오 로그인은 해당 값에 대한 추가 처리를 하지 않습니다.

state 값에 www.lottostory.co.kr/lotto_result_detail.php?cate=include&searchYN=Y 넣었습니다.

그럼

www.lottostory.co.kr/lotto_result_detail.php?cate=include&searchYN=Y

나와야되는거 아닌가요?

www.lottostory.co.kr/oauth?code=2pNiLj3vnbapmypdwL6m2nfULC2VquiPu6C1FF_9pyve46WhkWQrHBKPXGD75WfI8T3vfAo9cxgAAAF2IaK0XA&state=www.lottostory.co.kr%2Flotto_result_detail.php%3Fcate%3Dinclude

이게 나와서 물어봅니다.

@wcleeking

  1. urlencode 로 state 주소를 감싸서 호출하면 & 이후 안잘릴꺼예요.
  2. url은 원래 특수문자 치환됩니다. 파라메터에 /, ?, = 는 치환되서 표시됩니다.
  3. urlencode 만 잘 하셨으면 callback 페이지에서 echo 로 출력해보시면 정상 표기될거예요.
<?php $state = urlencode("http://localhost/return.php?test=test"); $client_id = "444444444444444444444444"; $redirect_uri = urlencode("http://localhost/callBackForKakao.php"); $kakaoLoginUrl = "https://kauth.kakao.com/oauth/authorize?client_id=".$client_id."&redirect_uri=".$redirect_uri."&response_type=code&state=".$state; ?>

----------- callback page
$state = $_GET[“state”];
echo($state);

1개의 좋아요