1.프로젝트 생성 [생략]
https://console.cloud.google.com/
Google 클라우드 플랫폼
로그인 Google 클라우드 플랫폼으로 이동
accounts.google.com
2.OAuth 동의 하기
위의 사진 처럼 프로젝트를 선택 후 왼쪽 메뉴 탭을 펼쳐서 OAuth 동의 화면을 클릭 한다.
프로젝트에 맞게 내부, 외부를 선택 후 만들기 클릭
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' 카테고리의 다른 글
[PHP] Apple 로그인 (0) | 2024.12.16 |
---|---|
[API] 네이버 로그인 API 연동 (0) | 2024.01.24 |
YouTube 간단히 연동하기 (0) | 2019.06.27 |