취업/소셜로그인

[CI4] 구글로그인 SDK PHP (프론트-컨트롤러 사용)

카슈밀 2022. 6. 23. 14:38
반응형

설치는 컴포저

composer require google/apiclient:^2.0

 

view와 통신용 컨트롤러 구분.

특이하게 use COMPOSERPATH;

선언했음에도 모듈호출시 '\'를 써야한다. 왜지?

// 프론트 해당 페이지 컨트롤러

	// 구글
    //Make object of Google API Client for call Google API
    $google_client = new \Google_Client();
    //Set the OAuth 2.0 Client ID
    $google_client->setClientId(GOOGLE_KEY);
    //Set the OAuth 2.0 Client Secret key
    $google_client->setClientSecret(GOOGLE_SECRET_KEY);
    //Set the OAuth 2.0 Redirect URI
    $google_client->setRedirectUri(BASEURL . '/api/GoogleAuth'); // 리다이렉트 주소. 해당 원하는 함수로 던져주면 된다.
    //
    $google_client->addScope('email');
    $google_client->addScope('profile');

    $data['google_client'] = $google_client;
    
    echo view('페이지', data);
    
    
 // View.php
 // createAuthUrl 이 주소 만들어주는 부분이다.
 <a href="<?=$google_client->createAuthUrl();?>" class="socials__social">
    <img src="/img/icons/google.png" alt="kakao" style="width:25px;" />
</a>
// 통신용 컨트롤러.php
if(isset($_GET['code'])) {
    $client = new \Google_Client();
    $client->setClientId(GOOGLE_KEY);
    //Set the OAuth 2.0 Client Secret key
    $client->setClientSecret(GOOGLE_SECRET_KEY);
    //Set the OAuth 2.0 Redirect URI
    $client->setRedirectUri(BASEURL . '/api/GoogleAuth');
    $client->addScope('email');
    $client->addScope('profile');

    $token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
    if(!isset($token['error']))
    {
        $client->setAccessToken($token['access_token']);
        $_SESSION['google_access_token'] = $token['access_token'];
    }
    $google_service = new \Google_Service_Oauth2($client);
    $data = $google_service->userinfo->get();
    
    // 데이터에 이메일, 프로필이 들어와 있고, 토큰에는 엑세스토큰과 만료시간이 적혀있다.
    // fetchAccessTokenWithAuthCode에서 해당 view컨트롤러와 동일한 내용이 아니면 호출이 안되는 것 같았다.
    // 작성 끝.
}

 

프론트에서 작동하다가 해커의 위협을 피해서 컨트롤러로 이전했다.

이전에는 JS를 통해서 작동하게 만들었지만, 이제 아예 노출되지 않도록 구성 완료.

728x90