Google OAuth API provides an easy and powerful way to integrate the login system on the website. Google Login API allows the user to sign in to the website using their Google account without signing up on that website. The Google login system definitely helps to increase the number of subscribers on your website. Because nowadays almost all users have a Google account and they can log in with their Google account without registration on your website.
Web developers can easily implement the login and registration system in the web application using Google OAuth 2.0 and PHP. In this tutorial, we’ll show how to integrate user login system with Google authentication using Google API PHP library. Here we’ll provide a step-by-step guide to implementing login with Google account using PHP and storing the user information in the MySQL database. Our example Google login script uses the API PHP Client Library to implement Login with Google using PHP in the web application.
Before getting started to integrate Login with Google using PHP and MySQL, take a look at the file structure.
google_login_with_php/ ├── config.php ├── index.php ├── logout.php ├── User.class.php ├── google-api-php-client/ └── css/ └── style.css
A dialog box will appear with OAuth client details, note the Client ID and Client secret. This Client ID and Client secret allow you to access the Google APIs.
Note that: This Client ID and Client secret need to be specified in the script at the time of Google API call. Also, the Authorized redirect URI needs to be matched with the redirect URL that specified in the script.
Do you want a detailed guide on Google Application creation? Go through this guide to create Google API Console Project and get Client ID & Client secret.
A table is required in the database to store the user account information from Google. The following SQL creates a users
table with some basic fields in the MySQL database to hold the Google profile information.
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`oauth_provider` enum('google','facebook','twitter','linkedin') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'google',
`oauth_uid` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`first_name` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`last_name` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`gender` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`locale` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`picture` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
The google-api-php-client
directory contains the Google OAuth Library for PHP. The composer is not required to install Google API PHP Client, it can be used without using composer. You don’t need to download it separately, all the required files of the Google API Library are included in our Google Login PHP source code.
The User class handles the database related operations (connect, insert, and update) using PHP and MySQL. It helps to connect to the database and insert/update Google account data in the users table.
<?php
/*
* User Class
* This class is used for database related (connect, insert, and update) operations
* @author CodexWorld.com
* @url http://www.codexworld.com
* @license http://www.codexworld.com/license
*/
class User {
private $dbHost = DB_HOST;
private $dbUsername = DB_USERNAME;
private $dbPassword = DB_PASSWORD;
private $dbName = DB_NAME;
private $userTbl = DB_USER_TBL;
private $db;
function __construct(){
if(!isset($this->db)){
// Connect to the database
$conn = new mysqli($this->dbHost, $this->dbUsername, $this->dbPassword, $this->dbName);
if($conn->connect_error){
die("Failed to connect with MySQL: " . $conn->connect_error);
}else{
$this->db = $conn;
}
}
}
function checkUser($data = array()){
if(!empty($data)){
// Check whether the user already exists in the database
$checkQuery = "SELECT * FROM ".$this->userTbl." WHERE oauth_provider = '".$data['oauth_provider']."' AND oauth_uid = '".$data['oauth_uid']."'";
$checkResult = $this->db->query($checkQuery);
// Add modified time to the data array
if(!array_key_exists('modified',$data)){
$data['modified'] = date("Y-m-d H:i:s");
}
if($checkResult->num_rows > 0){
// Prepare column and value format
$colvalSet = '';
$i = 0;
foreach($data as $key=>$val){
$pre = ($i > 0)?', ':'';
$colvalSet .= $pre.$key."='".$this->db->real_escape_string($val)."'";
$i++;
}
$whereSql = " WHERE oauth_provider = '".$data['oauth_provider']."' AND oauth_uid = '".$data['oauth_uid']."'";
// Update user data in the database
$query = "UPDATE ".$this->userTbl." SET ".$colvalSet.$whereSql;
$update = $this->db->query($query);
}else{
// Add created time to the data array
if(!array_key_exists('created',$data)){
$data['created'] = date("Y-m-d H:i:s");
}
// Prepare column and value format
$columns = $values = '';
$i = 0;
foreach($data as $key=>$val){
$pre = ($i > 0)?', ':'';
$columns .= $pre.$key;
$values .= $pre."'".$this->db->real_escape_string($val)."'";
$i++;
}
// Insert user data in the database
$query = "INSERT INTO ".$this->userTbl." (".$columns.") VALUES (".$values.")";
$insert = $this->db->query($query);
}
// Get user data from the database
$result = $this->db->query($checkQuery);
$userData = $result->fetch_assoc();
}
// Return user data
return !empty($userData)?$userData:false;
}
}
?>
In the config.php
file, database settings and Google API configuration constant variables are defined.
Database constants:
Google API constants:
Call Google API:
The Google Client library is used to connect with Google API and working with OAuth client.
<?php // Database configuration define('DB_HOST', 'MySQL_Database_Host'); define('DB_USERNAME', 'MySQL_Database_Username'); define('DB_PASSWORD', 'MySQL_Database_Password'); define('DB_NAME', 'MySQL_Database_Name'); define('DB_USER_TBL', 'users'); // Google API configuration define('GOOGLE_CLIENT_ID', 'Insert_Google_Client_ID'); define('GOOGLE_CLIENT_SECRET', 'Insert_Google_Client_Secret'); define('GOOGLE_REDIRECT_URL', 'Callback_URL'); // Start session if(!session_id()){ session_start(); } // Include Google API client library require_once 'google-api-php-client/Google_Client.php'; require_once 'google-api-php-client/contrib/Google_Oauth2Service.php'; // Call Google API $gClient = new Google_Client(); $gClient->setApplicationName('Login to CodexWorld.com'); $gClient->setClientId(GOOGLE_CLIENT_ID); $gClient->setClientSecret(GOOGLE_CLIENT_SECRET); $gClient->setRedirectUri(GOOGLE_REDIRECT_URL); $google_oauthV2 = new Google_Oauth2Service($gClient);
Note that: You’ll find the Client ID and Client Secret on the Google API Manager page of the API Console project.
In this file, the API authentication and authorization process are handled using PHP.
checkUser()
function of User class.<?php
// Include configuration file
require_once 'config.php';
// Include User library file
require_once 'User.class.php';
if(isset($_GET['code'])){
$gClient->authenticate($_GET['code']);
$_SESSION['token'] = $gClient->getAccessToken();
header('Location: ' . filter_var(GOOGLE_REDIRECT_URL, FILTER_SANITIZE_URL));
}
if(isset($_SESSION['token'])){
$gClient->setAccessToken($_SESSION['token']);
}
if($gClient->getAccessToken()){
// Get user profile data from google
$gpUserProfile = $google_oauthV2->userinfo->get();
// Initialize User class
$user = new User();
// Getting user profile info
$gpUserData = array();
$gpUserData['oauth_uid'] = !empty($gpUserProfile['id'])?$gpUserProfile['id']:'';
$gpUserData['first_name'] = !empty($gpUserProfile['given_name'])?$gpUserProfile['given_name']:'';
$gpUserData['last_name'] = !empty($gpUserProfile['family_name'])?$gpUserProfile['family_name']:'';
$gpUserData['email'] = !empty($gpUserProfile['email'])?$gpUserProfile['email']:'';
$gpUserData['gender'] = !empty($gpUserProfile['gender'])?$gpUserProfile['gender']:'';
$gpUserData['locale'] = !empty($gpUserProfile['locale'])?$gpUserProfile['locale']:'';
$gpUserData['picture'] = !empty($gpUserProfile['picture'])?$gpUserProfile['picture']:'';
// Insert or update user data to the database
$gpUserData['oauth_provider'] = 'google';
$userData = $user->checkUser($gpUserData);
// Storing user data in the session
$_SESSION['userData'] = $userData;
// Render user profile data
if(!empty($userData)){
$output = '<h2>Google Account Details</h2>';
$output .= '<div class="ac-data">';
$output .= '<img src="'.$userData['picture'].'">';
$output .= '<p><b>Google ID:</b> '.$userData['oauth_uid'].'</p>';
$output .= '<p><b>Name:</b> '.$userData['first_name'].' '.$userData['last_name'].'</p>';
$output .= '<p><b>Email:</b> '.$userData['email'].'</p>';
$output .= '<p><b>Gender:</b> '.$userData['gender'].'</p>';
$output .= '<p><b>Locale:</b> '.$userData['locale'].'</p>';
$output .= '<p><b>Logged in with:</b> Google Account</p>';
$output .= '<p>Logout from <a href="logout.php">Google</a></p>';
$output .= '</div>';
}else{
$output = '<h3 style="color:red">Some problem occurred, please try again.</h3>';
}
}else{
// Get login url
$authUrl = $gClient->createAuthUrl();
// Render google login button
$output = '<a href="'.filter_var($authUrl, FILTER_SANITIZE_URL).'" class="login-btn">Sign in with Google</a>';
}
?>
<div class="container">
<!-- Display login button / Google profile information -->
<?php echo $output; ?>
</div>
When the user wishes to log out from their Google account, the logout.php
file is loaded.
<?php
// Include configuration file
require_once 'config.php';
// Remove token and user data from the session
unset($_SESSION['token']);
unset($_SESSION['userData']);
// Reset OAuth access token
$gClient->revokeToken();
// Destroy entire session data
session_destroy();
// Redirect to homepage
header("Location: index.php");
exit();
?>
Once the Google login integration is completed and the authentication process is working properly, you need to make the Google API Console Project public.
You need to submit the application for verification to make the Google Cloud Console project public.
We’ve tried to make the Google Login integration process quicker and easier. The example code integrates Google Login with the Google API Client for PHP. Also, you don’t need to add API Client Library files separately, our source code contains all the required files with the OAuth client for PHP. If you want to provide a user-friendly login interface, integrate Google Login without page refresh using JavaScript API – Login with Google Account using JavaScript
Do you want to get implementation help, or enhance the functionality of this script? Click here to Submit Service Request
Hi i would like to check the session whether user is logged in or not. How could i identify ??? So that i can use this login in my website for user login.
Thanks in Advance
Is there an easy way to “remember me on this computer” so the login with stay logged in after the browser is closed and re-opened?
?where to get google-api-php-client
Download the source code, all the required files including Google API PHP client library are included in it.
Hi , I just used your code and its working as expected. Thanks for the nice work!
My question is instead of redirecting to another tab for google account verification is there any way to do it in a popup somehow ?
Thanks in advance.
Yes possible, use Google JavaScript API instead of PHP OAuth Library. See this tutorial to integrate Google login without page redirect – https://www.codexworld.com/login-with-google-account-using-javascript/
I had to replace this code because Google + API is turning off.
This tutorial is the updated version of Google OAuth with PHP and the script does not use the Google+ API. See this tutorial and download the source code to integrate Google Sign-in authentication on your website without any dependencies on Google+ API. Since, the Google+ Sign-in feature has been fully deprecated, migrate it to the Google Sign-in authentication system right now.
Hello, can I get some help to work on iOS for the browser embedded webview? we use it on a wifi login platform (Hotspot) and we need it.
Hello we have a Wi-Fi platform, we use to login with Google, however, in access with iOS in embedded browsers does not work, this is our main use, we received a message from Google User Agent not allowed, there is something in What can we do to make this work? I believe I’m something on user_agent, thank you
Google no longer allow OAuth requests to Google in embedded browsers known as “web-views”.
where l can download de folder scr
You don’t need to download it separately, all the required files are included in the source code.
That code works perfectly. Thank you so much!
how we can retrieve mobile number ??
Its awesome tutorial with video and app demo, easily to understand and now try to implement
Hello your all code always works super
Great article, thanks. Is there a way to limit to a certain domain? I want to use google auth login for users using google apps with custom domain. Is there a way to capture the email address on my php form first and if domain matches then pass it to google to process the authentication and send it back to my application?
Great tutorial, thanks for sharing.
Great tutorial. Works perfectly. Much clearer than the explanationn from the guys @ Google.
Many thanks
hello Codexworld ..
I want to use above your googleplus login code in my web …so how i can implement it on sign up/sign form. so please ha
Thanks in advanc
Where can i find the source code package for get all libraries ?
You can get the source code by the download link at end of the tutorial.
Codexworld you are awesome dude this is very useful form me i was searching for this from last 30 days finally i got it thanks men
Sir i want to redirect to my website when user get login please help me how to do this thanks in advance
Great tutorials thanks.
How can i set this for multiple users of google.
Current this is use for only single user.
really its being helpful
how to get these from google libraries
src/
Google API, Google Client, Google Oauth and other libraries
—–
and
—-
can I insert id from another table?
You will find all Google API libraries in the source code package.
thank you nice post.with your code it’s working i am signing to google+. how i can sign with google to my application sir..
How to synchronize both facebook login and google login from same website?
Hi sir , I am implementing this in Zend framework and it is not working in zend. There is 404 page not found error when request redirect to my project. So can you please help me or provide it for zend framework also ….
where i can download the libraries? Google API, Google Client, Google Oauth and other libraries?
All required libraries can be found in our source code.
Great tutorial thanks
Great One thank you so much
Great tutorial, thx!
Is there any easy way to get data from youtube account when logging?
Very nice tutorial,
Thanks for providing this.
i want to combine facebook , linkedin and google auth login code using php …. Plz help me
WELL DONE ! This is the only script work very well
Although initially had received Error: redirect_uri_mismatch result does not include the slash at the end of Google Credential’s Authorized redirect URIs
http://localhost/login-with-google-api-using-php/
So I add a slash and all went smoothly
Thanx you CodexWorld it’s help me alot…
Good job! But how to customize the button? I’d like to implement this in Angular Material, on a button of the Framework.
Good Job. I like this…
that really great post (y)
Hi, great handy script. Any ideas on how I can limit access based on a domain?
nice tutorial!
I want to get mobile number from google and facebook profile using your code
Nice
Good Tutorial.
But need some more introduction for implementation for new developers.
Hello there,
Great tutorial thanks, but is there a way to accept only accept login from users from a specific hosted domain?
Thanks!
Tom
Is it necessary to have live domain/ website to do this ??
I am developing a website that would require to use login with gmail account but it’s not on live server . Is there any way i can do this from my local host ??
@Pritesh You can test Google Account login script on localhost. Use localhost as a domain name in Authorized redirect URIs fields (http://localhost/login-with-google-api-using-php) at Google Developers Console.