IT 알쓸신잡

그누보드에서 소셜 로그인 연동 해제 [네이버] 본문

Development

그누보드에서 소셜 로그인 연동 해제 [네이버]

솦트웰러 2023. 3. 10. 17:51
728x90
반응형

그누보드에서 카카오 소셜 로그인 연동 해제에 이어 네이버 소셜 로그인 연동 해제를 알아볼까 합니다.

 

2023.03.08 - [Development] - 그누보드에서 소셜 로그인 연동 해제 [카카오]

 

그누보드에서 소셜 로그인 연동 해제 [카카오]

그누보드에서 소셜 로그인 적용 테스트 중, 회원 탈퇴 시 소셜 로그인 연동 해제를 시켜줘야 하는데 DB에서는 삭제가 되지만 연동은 해제가 안되더군요... 확인은 탈퇴 후 재가입 시 사용자에게

swmaster.tistory.com

 

이전 글을 보셨으면,

www/plugin/social/includes/functions.php 파일에,

social_member_link_delete 함수에서 DB에 소셜 계정 정보를 삭제 후, unlink 함수 호출이 되는 부분이 들어가 있을겁니다.

 

1. Naver.php 에 unlink 함수 만들기

www/plugin/social/Hybrid/Providers/Naver.php 파일에 아래와 같이 unlink 함수를 만들어 줍니다.

    function unlink($code)
    {
      $params = array(
          "grant_type"        => "delete",
          "client_id"         => $this->api->client_id,
          "client_secret"     => $this->api->client_secret,
          "access_token"      => $this->api->access_token,
          "service_provider"  => $code
          );

      $response = $this->request($this->api->token_url, $params, $this->api->curl_authenticate_method);
      $unlink_responseArr = json_decode($response, true);

      return $unlink_responseArr;
    }

request 함수에 호출하는 url은 소셜 로그인 시 호출하는 token_url을 그대로 사용하면 되고,

$params의 구성이 중요합니다.

 

"grant_type" => "delete" 가 연동해제 요청 핵심입니다.

client_id, client_secret 은 소셜로그인 등록 시 받은 값이고,

access_token 은 소셜 로그인 요청 시 받은 것이고,

service_provider 는 Naver 가 되겠죠.

 

    private function request($url, $params=false, $type="GET")
    {
        if(Class_exists('Hybrid_Logger')){
            Hybrid_Logger::info("Enter OAuth2Client::request( $url )");
            Hybrid_Logger::debug("OAuth2Client::request(). dump request params: ", serialize( $params ));
        }
        $this->http_info = array();
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL           , $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT       , $this->api->curl_time_out);
        curl_setopt($ch, CURLOPT_USERAGENT     , $this->api->curl_useragent);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->api->curl_connect_time_out);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, $this->api->curl_ssl_verifypeer);
//--------------------------------------------변경-------------------------------------------------------------        
        //curl_setopt($ch, CURLOPT_HTTPHEADER, $this->api->curl_header);        
        curl_setopt($ch, CURLOPT_HTTPHEADER    , array("Authorization: Bearer " . $this->api->access_token));
//-------------------------------------------------------------------------------------------------------------        

        if ( $this->api->curl_proxy ) {
            curl_setopt( $ch, CURLOPT_PROXY, $this->curl_proxy);
        }
        if ( $type == "POST" ) {
            curl_setopt($ch, CURLOPT_POST, 1);
            if ($params) curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query($params) );
        }

        $response = curl_exec($ch);
        if(Class_exists('Hybrid_Logger')){
            Hybrid_Logger::debug( "OAuth2Client::request(). dump request info: ", serialize(curl_getinfo($ch)) );
            Hybrid_Logger::debug( "OAuth2Client::request(). dump request result: ", serialize($response ));
        }
        $this->http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $this->http_info = array_merge($this->http_info, curl_getinfo($ch));

	curl_close ($ch);

        return $response;
    }

request 함수는 curl 방식의 통신을 통해 네이버에 전송을 하구요.

카카오와 동일하게 request 함수에서 CURLOPT_HTTPHEADER 값은 access_token을 직접 Array 형태로 지정하도록 합니다.

 

2. 결과 확인
$unlink_responseArr = json_decode($response, true);
echo "<script>alert('$unlink_responseArr[result]');</script>";

json_decode를 통해 결과값을 정리하면, 카카오와 다르게 result가 넘어오는군요.

성공 시에는 success 입니다^^

그누보드에서 네이버 소셜로그인 연동 해제

 

3. 재가입 확인

재가입 시 아래와 같이 동의하기 화면이 나오는군요. 연동 해제가 잘 된것을 확인할 수 있습니다.

다음에는 구글 소셜 로그인 연동 해제 기능을 넣어보도록 하겠습니다.

728x90
반응형
Comments