<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
	<channel>
				<title><![CDATA[카카오톡 소셜 로그인 에러 문제]]></title>
		<link>https://www.cosmosfarm.com/threads/rss/document/9840</link>
		<description><![CDATA[<p>안녕하세요.<br />
일반적인 워드프레스 플러그인 문제도 혹시 문의가 가능한지 싶어 글을 남깁니다.</p>

<p>만일 답변이 가능하시면 부탁드리겠습니다.</p>

<p>현재 </p>

<ol><li>
	<p>문제가 재현되는 site 의 url 은 <a href="http://www.ohlady.co.kr/" target="_blank">http://www.ohlady.co.kr</a></p>
	</li>
	<li>
	<p>소셜 설치 플러그인 : Wordpress Social Plugins</p>
	</li>
</ol><p>      3.네이버 ,카카오 소셜 설치 : WordPress Social Login extends NAVE</p>

<p>      4. <a href="https://github.com/usefulparadigm/hybridauth-kakao" target="_blank">https://github.com/usefulparadigm/hybridauth-kakao</a> 사용했습니다.</p>

<p>      5. 저같은 경우 직접 functions.php 에 추가를 하지 않고 WordPress Social Login extends NAVER 통해 Wordpress Social Plugins 에등록을 해서 API 값을 넣고 진행을 했었습니다.</p>

<p>      6. 처음 로그인시 동의 묻는 부분을 거쳐 로그인을 진행하고 나서 부터 계속 로그인명이 없는 상태로는 사용자를 생성할 수 없습니다라는 에러가 뜨는 문제입니다.</p>

<p>       <a href="https://beta.postimg.org/image/483bk6v67/" target="_blank"><img alt="로그인 에러 화면" src="https://postimg.org/image/8fy3sxwlr/" /></a></p>

<p>       제일 처음에는 <a href="http://www.usefulparadigm.com/2014/07/15/adding-kakao-login-to-wordpress/">http://www.usefulparadigm.com/2014/07/15/adding-kakao-login-to-wordpress/</a> 를 통해서 하다가 이미지가 계속 먹지가 않아서 그냥 플러그인을 통해서 설치를 해서 테마내 functions.php 부분은 따로 손댄것은 없습니다.</p>

<p>     </p>

<p>       코스모스팜 로그인을 할때 카카오톡으로 로그인을 할 수 있게 되어 있어서 혹시나 해서 문의 드렸습니다.</p>

<p>       참고로 지금 셋팅한 kakao.php 소스 내용입니다.</p>

<p>---------------------------------------------------------------------------------------------------------------------------</p>

<p> </p>

<p>/*!<br />
* HybridAuth<br />
* http://hybridauth.sourceforge.net | https://github.com/hybridauth/hybridauth<br />
*  (c) 2009-2011 HybridAuth authors | hybridauth.sourceforge.net/licenses.html<br />
*/</p>

<p>/**<br />
 * Hybrid_Providers_Kakao <br />
 */<br />
class Hybrid_Providers_Kakao extends Hybrid_Provider_Model_OAuth2<br />
{ <br />
    /**<br />
    * IDp wrappers initializer <br />
    */<br />
    function initialize() <br />
    {<br />
        parent::initialize();</p>

<p>        // Provider api end-points<br />
        $this-&gt;api-&gt;api_base_url  = "https://kapi.kakao.com/v1/";<br />
        $this-&gt;api-&gt;authorize_url = "https://kauth.kakao.com/oauth/authorize";<br />
        $this-&gt;api-&gt;token_url     = "https://kauth.kakao.com/oauth/token";<br />
    }</p>

<p>    /**<br />
    * finish login step <br />
    */<br />
    function loginFinish()<br />
    {<br />
        $error = (array_key_exists('error',$_REQUEST))?$_REQUEST['error']:"";</p>

<p>        // check for errors<br />
        if ( $error ){ <br />
            throw new Exception( "Authentication failed! {$this-&gt;providerId} returned an error: $error", 5 );<br />
        }</p>

<p>        // try to authenicate user<br />
        $code = (array_key_exists('code',$_REQUEST))?$_REQUEST['code']:"";</p>

<p>        try{<br />
            $this-&gt;authenticate( $code ); <br />
        }<br />
        catch( Exception $e ){<br />
            throw new Exception( "User profile request failed! {$this-&gt;providerId} returned an error: $e", 6 );<br />
        }</p>

<p>        // check if authenticated<br />
        if ( ! $this-&gt;api-&gt;access_token ){ <br />
            throw new Exception( "Authentication failed! {$this-&gt;providerId} returned an invalid access token.", 5 );<br />
        }</p>

<p>        // store tokens<br />
        $this-&gt;token( "access_token" , $this-&gt;api-&gt;access_token  );<br />
        $this-&gt;token( "refresh_token", $this-&gt;api-&gt;refresh_token );<br />
        $this-&gt;token( "expires_in"   , $this-&gt;api-&gt;access_token_expires_in );<br />
        $this-&gt;token( "expires_at"   , $this-&gt;api-&gt;access_token_expires_at );</p>

<p>        // set user connected locally<br />
        $this-&gt;setUserConnected();<br />
    }</p>

<p>    /**<br />
    * load the user profile from the IDp api client<br />
    */<br />
    function getUserProfile()<br />
    {<br />
        // ask kakao api for user infos<br />
       <strong> $this-&gt;user-&gt;profile-&gt;email = "kakao_user".$kakao_user_id."@example.com";  --&gt; 기존 소스에 동일한 문제가 있는 내용을 검색해서 이 문구로 해결이 되었다고 추가를 했는데도 여전히 에러가 나오네요.</strong><br />
        $data = $this-&gt;api-&gt;api( "user/me" ); <br />
        <br />
        if ( ! isset( $data-&gt;id ) || isset( $data-&gt;error ) ){<br />
            throw new Exception( "User profile request failed! {$this-&gt;providerId} returned an invalid response.", 6 );<br />
        }</p>

<p>        $this-&gt;user-&gt;profile-&gt;identifier  = @ $data-&gt;id; <br />
        $this-&gt;user-&gt;profile-&gt;displayName = @ $data-&gt;properties-&gt;nickname;<br />
        $this-&gt;user-&gt;profile-&gt;photoURL    = @ $data-&gt;properties-&gt;thumbnail_image;</p>

<p>        return $this-&gt;user-&gt;profile;<br />
    }</p>

<p>    private function authenticate( $code )<br />
    {<br />
        $params = array(<br />
            "client_id"     =&gt; $this-&gt;api-&gt;client_id,<br />
            "grant_type"    =&gt; "authorization_code",<br />
            "redirect_uri"  =&gt; $this-&gt;api-&gt;redirect_uri,<br />
            "code"          =&gt; $code<br />
        );<br />
        <br />
        $response = $this-&gt;request( $this-&gt;api-&gt;token_url, $params, $this-&gt;api-&gt;curl_authenticate_method );</p>

<p>        $response = $this-&gt;parseRequestResult( $response );</p>

<p>        if( ! $response || ! isset( $response-&gt;access_token ) ){<br />
            throw new Exception( "The Authorization Service has return: " . $response-&gt;error );<br />
        }</p>

<p>        if( isset( $response-&gt;access_token  ) )  $this-&gt;api-&gt;access_token           = $response-&gt;access_token;<br />
        if( isset( $response-&gt;refresh_token ) ) $this-&gt;api-&gt;refresh_token           = $response-&gt;refresh_token; <br />
        if( isset( $response-&gt;expires_in    ) ) $this-&gt;api-&gt;access_token_expires_in = $response-&gt;expires_in; <br />
        <br />
        // calculate when the access token expire<br />
        if( isset($response-&gt;expires_in)) {<br />
            $this-&gt;api-&gt;access_token_expires_at = time() + $response-&gt;expires_in;<br />
        }</p>

<p>        return $response;  <br />
    }</p>

<p>    private function request( $url, $params=false, $type="GET" )<br />
    {<br />
    // Hybrid_Logger::info( "Enter OAuth2Client::request( $url )" );<br />
    // Hybrid_Logger::debug( "OAuth2Client::request(). dump request params: ", serialize( $params ) );</p>

<p>        $this-&gt;http_info = array();<br />
        $ch = curl_init();<br />
        <br />
        curl_setopt($ch, CURLOPT_URL            , $url );<br />
        curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1 );<br />
        curl_setopt($ch, CURLOPT_TIMEOUT        , $this-&gt;api-&gt;curl_time_out );<br />
        curl_setopt($ch, CURLOPT_USERAGENT      , $this-&gt;api-&gt;curl_useragent );<br />
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT , $this-&gt;api-&gt;curl_connect_time_out );<br />
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , $this-&gt;api-&gt;curl_ssl_verifypeer );<br />
        curl_setopt($ch, CURLOPT_HTTPHEADER     , $this-&gt;api-&gt;curl_header );</p>

<p>        if($this-&gt;api-&gt;curl_proxy){<br />
            curl_setopt( $ch, CURLOPT_PROXY        , $this-&gt;curl_proxy);<br />
        }</p>

<p>        if( $type == "POST" ){<br />
            curl_setopt($ch, CURLOPT_POST, 1); <br />
            if($params) curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query($params) );<br />
        }</p>

<p>        $response = curl_exec($ch);<br />
    // Hybrid_Logger::debug( "OAuth2Client::request(). dump request info: ", serialize( curl_getinfo($ch) ) );<br />
    // Hybrid_Logger::debug( "OAuth2Client::request(). dump request result: ", serialize( $response ) );</p>

<p>        $this-&gt;http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);<br />
        $this-&gt;http_info = array_merge($this-&gt;http_info, curl_getinfo($ch));</p>

<p>        curl_close ($ch);</p>

<p>        return $response; <br />
    }</p>

<p>    private function parseRequestResult( $result )<br />
    {<br />
        if( json_decode( $result ) ) return json_decode( $result );</p>

<p>        parse_str( $result, $ouput ); </p>

<p>        $result = new StdClass();</p>

<p>        foreach( $ouput as $k =&gt; $v )<br />
            $result-&gt;$k = $v;</p>

<p>        return $result;<br />
    }<br />
}</p>

<p> </p>
]]></description>
		<copyright>Copyright 2026, 코스모스팜</copyright>
				<item>
			<title><![CDATA[코스모스팜 회원관리 플러그인을 사용하시면 워드프레스에서 소셜 로그인 기능을 쉽게 구현하실 수 있습...]]></title>
			<link>https://www.cosmosfarm.com/threads/document/10792</link>
			<description><![CDATA[<p><a href="http://www.cosmosfarm.com/wpstore/product/cosmosfarm-members" target="_blank">코스모스팜 회원관리</a> 플러그인을 사용하시면 워드프레스에서 소셜 로그인 기능을 쉽게 구현하실 수 있습니다.</p>

<p>참고해주세요^^</p>
]]></description>
			<author>스레드봇</author>
			<pubDate>Thu, 03 Nov 2016 09:38:43 +0000</pubDate>
			<category>워드프레스</category>
		</item>
				<item>
			<title><![CDATA[모든 워드프레스 관련 내용을 자유롭게 올리실 수 있습니다^^!

그런데 도움을 드리고 싶지만 올려주신 ...]]></title>
			<link>https://www.cosmosfarm.com/threads/document/9852</link>
			<description><![CDATA[<p>모든 워드프레스 관련 내용을 자유롭게 올리실 수 있습니다^^!</p>

<p>그런데 도움을 드리고 싶지만 올려주신 이미지가 나오지 않는군요.</p>

<p>워드프레스 소셜로그인 능력자가 이 글을보고 도움을 주셨으면 좋겠습니다.</p>

<p>저희도 관련 기능을 제공해보겠습니다.</p>
]]></description>
			<author>스레드봇</author>
			<pubDate>Mon, 01 Aug 2016 02:47:07 +0000</pubDate>
			<category>워드프레스</category>
		</item>
			</channel>
</rss>