1.프로젝트 생성 [생략]

https://console.cloud.google.com/

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

 

2.OAuth 동의 하기

OAuth 동의 화면

 

위의 사진 처럼 프로젝트를 선택 후 왼쪽 메뉴 탭을 펼쳐서 OAuth 동의 화면을 클릭 한다.

OAuth 동의 화면2

프로젝트에 맞게 내부, 외부를 선택 후 만들기 클릭

 

2-1.앱 등록 하기.

 

항목에 맞게 써주는데 홈페이지 URL은 이때 안 써도 된다.

 

 

범위 추가 또는 삭제 버튼을 클릭 해서 필요한 범위를 체크 해준다.

 

테스트를 할 사용자의 계정을 추가 해준다.

 

 

추가 후 OAuth 동의 화면 메뉴를 클릭 후 앱 게시 버튼을 클릭 해준다.

 

3.OAuth 클라이언트 ID를 생성

 

 

 

사용자 인증 정보 메뉴 클릭 -> +사용자 인증 정보 만들기 클릭 -> OAuth 클라이언트 ID 클릭

 

 

웹 어플리케이션으로 선택 후 이름, URL, 리다이렉트 URL을 설정해준다.

 

4.코드

php 코드

<?php
$google_redirect_url = "등록한 리다이렉트 주소(파일명 제거)";
$client_id = '발급한 클라이언트 ID';
$client_secret = '발급한 시크릿 키';
$scope = 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile';

function curl($url,$parameters){
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$parameters);
    $data = curl_exec($ch);
    return $data;
}

function getCallbackUrl(){
    global $google_redirect_url;
    return urlencode($google_redirect_url.'login_google.php?google=callback');
}

function getLoginUrl(){
    global $client_id,$scope;
    return "https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=".getCallbackUrl()."&client_id=".$client_id."&scope=".$scope;
}

function getAccessToken(){
    global $client_id,$client_secret;

    if(isset($_GET['code'])){
        // get access token from authorization code
        $url = "https://accounts.google.com/o/oauth2/token";
        $parameters="code=".$_GET['code']."&client_id=".$client_id."&client_secret=".$client_secret."&redirect_uri=".getCallbackUrl()."&grant_type=authorization_code";
        return json_decode(curl($url,$parameters),true)['access_token'];

    }else if(isset($_SESSION['access_token'])){
        // get access token from session
        return $_SESSION['access_token'];

    }else{
        // redirect to login url
        header("Location: ".getLoginUrl());
        exit;

    }
}

function getUserInfo(){

    // get user info from google api
    $url="https://www.googleapis.com/oauth2/v1/userinfo?alt=json&access_token=".getAccessToken();
    return json_decode(file_get_contents($url),true);

}

if(isset($_GET['google']) && $_GET['google']=='callback'){

    // store access token in session
    $_SESSION['access_token']=getAccessToken();

    // redirect to index page
    header("Location: ".$google_redirect_url."login_google.php");

}else{
    $res = getUserInfo();
    //여기서 로그인된 정보를 갖고 회원 가입 및 로그인 연동
    exit;
}

 

redirect_url 변수 사용하는 곳을 보면 파일명을 따로 쓰기 때문에 처음 선언시 파일명을 제외한 URL로 입력 시켜야 한다.

또한 getcallbackUrl() 함수를 보면 ?google=callback 이렇게 파라미터를 보내기 때문에 애플리케이션 설정 페이지에서

redirect url을 저장시 기존 파일명에 ?google=callback 파라미터를 보내는 url도 저장시켜야 한다.

예를 들면 저장 시켜야 하는 URL은 2개이다.

-https://localhost:8080/API/login_google.php

-https://localhost:8080/API/ login_google.php?goole=callback 

위의 2개를 저장 시켜야 한다.

 

프론트에서 코드

<a href="/API/login_google.php">구글 로그인</a>

 

'프로그래밍 > API' 카테고리의 다른 글

[API] 네이버 로그인 API 연동  (0) 2024.01.24
YouTube 간단히 연동하기  (0) 2019.06.27

+ Recent posts