PHP實現Google Oauth的登入系統

wyfem發表於2021-09-09

本文講述的是如何為你的PHP專案實現Google的Oauth系統。這個示例PHP指令碼非常快,對增加你的PHP專案註冊當然是很有幫助的。

在這之前,我們已經覆蓋了包含Facebook、Twitter、Google plus以及Instagram的Oauth登入系統示例。很遺憾之前我遺漏掉了Google的Oauth登入系統。今天我們就來看一下如何為你的web專案實現Google的Oauth系統。

在這之前,我們已經覆蓋了包含Facebook、Twitter、Google plus以及Instagram的Oauth登入系統示例。很遺憾之前我遺漏掉了Google的Oauth登入系統。今天我們就來看一下如何為你的web專案實現Google的Oauth系統。這個示例指令碼非常快,對增加你的web專案註冊當然是很有幫助的。

Google Oauth登入系統開發示例

Google Oauth登入系統開發示例

資料庫設計

資料庫設計很簡單,如下所示:

CREATE TABLE users  
(  
id INT PRIMARY KEY AUTO_INCREMENT,  
email VARCHAR(50) UNIQUE,  
fullname VARCHAR(100),  
firstname VARCHAR(50),  
lastname VARCHAR(50),  
google_id VARCHAR(50),  
gender VARCHAR(10),  
dob VARCHAR(15),  
profile_image TEXT,  
gpluslink TEXT

1,域名註冊

這裡註冊或者新增你的域名。

域名註冊

域名註冊

2,所有權認證

驗證您的域名所有權,可以通過HTML檔案上傳或包括META標記。

所有權認證

所有權認證

3,OAuth Keys

谷歌將提供你OAuth使用者金鑰和OAuth祕密金鑰。

Oauth keys

Oauth keys

4, Google API控制檯

Google API控制檯建立客戶端ID。

Google API控制檯

Google API控制檯

Google API控制檯

Google API控制檯

然後你就可以看見你的客戶端ID和金鑰。

配置好的Google Oauth資訊

配置好的Google Oauth資訊

config.php

你可以在src資料夾找到這個檔案,在這裡您需要配置應用程式OAuth金鑰,Consumer keys和重定向回撥URL。

// OAuth2 Settings, you can get these keys at https://code.google.com/apis/console Step 6 keys  
'oauth2_client_id' => 'App Client ID',  
'oauth2_client_secret' => 'App Client Secret',  
'oauth2_redirect_uri' => 'http://yoursite.com/gplus/index.php',  

// OAuth1 Settings Step 3  keys.  
'oauth_consumer_key' => 'OAuth Consumer Key',  
'oauth_consumer_secret' => 'OAuth Consumer Secret',

google_login.php

Google plus登入系統,你只需要在index.php中載入這個檔案。

<?php  
require_once 'src/apiClient.php';  
require_once 'src/contrib/apiOauth2Service.php';  
session_start();  
$client = new apiClient();  
setApplicationName("Google Account Login");  
$oauth2 = new apiOauth2Service($client);  
if (isset($_GET['code']))  
{  
$client->authenticate();  
$_SESSION['token'] = $client->getAccessToken();  
$redirect = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];  
header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));  
}  
if (isset($_SESSION['token'])) {  
$client->setAccessToken($_SESSION['token']);  
}  
if (isset($_REQUEST['logout'])) {  
unset($_SESSION['token']);  
unset($_SESSION['google_data']); //Google session data unset  
$client->revokeToken();  
}  
if ($client->getAccessToken())  
{  
$user = $oauth2->userinfo->get();  
$_SESSION['google_data']=$user; // Storing Google User Data in Session  
header("location: home.php");  
$_SESSION['token'] = $client->getAccessToken();  
} else {  
$authUrl = $client->createAuthUrl();  
}  
if(isset($personMarkup)):  
print $personMarkup;  
endif 
if(isset($authUrl))  
{  
echo "<a class="login" href="$authUrl">Google Account Login</a>";  
} else {  
echo "<a class="logout" href="?logout">Logout</a>";  
}  
?>

home.php

在這裡我們需要向之前建立的user表插入Google plus的session資訊。程式碼如下:

<?php  
session_start();  
include('db.php'); //Database Connection.  
if (!isset($_SESSION['google_data'])) {  
// Redirection to application home page.  
header("location: index.php");  
}  
else 
{  
//echo print_r($userdata);  
$userdata=$_SESSION['google_data'];  
$email =$userdata['email'];  
$googleid =$userdata['id'];  
$fullName =$userdata['name'];  
$firstName=$userdata['given_name'];  
$lastName=$userdata['family_name'];  
$gplusURL=$userdata['link'];  
$avatar=$userdata['picture'];  
$gender=$userdata['gender'];  
$dob=$userdata['birthday'];  
//Execture query  
$sql=mysql_query("insert into users(email,fullname,firstname,lastname,google_id,gender,dob,profile_image,gpluslink) values('$email','$fullName','$firstName','$lastName','$googleid','$gender','$dob','$avatar','$gplusURL')");  
?>

db.php

資料庫配置檔案。

<?php  
$mysql_hostname = "localhost";  
$mysql_user = "username";  
$mysql_password = "password";  
$mysql_database = "databasename";  
$bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Could not connect database");  
mysql_select_db($mysql_database, $bd) or die("Could not select database");  
?>

相關文章