In this tutorial, you will learn how to perform login action with Google Account using PHP, MySQLi, and Google OAuth API.
Follow the below steps to create this Login Application
First of all, you must have the Google OAuth 2.0 Client Secret and Client ID.
How to get Google OAuth 2.0 Client Secret & the Client ID?
- Login to Google API Console
First, go to the Google API Console and login with your Google account.
- Create a New Project
After login to your account, Go to Select a project > New Project, and create a new project.
- Select your project
After creating a new project, Now select the project.
- Configure Consent Screen
Now go to the credentials and configure the consent screen –
- Last step of configuring consent screen
Enter the application name and save it –
- Creating OAuth Credentials
Again go to the credentials and create OAuth Credential –
- OAuth for web application
Choose the web application > type the name > enter the redirect URL > Click on the create button
- The Client id and Client secret
Now you have got the client id and client secret, copy them and save elsewhere.
Creating Application Files & Folders
After getting the client id and client secret, now we will create our application files & folders.
So, go to your XAMPP htdocs
folder or www
directory and create a new folder called google_login
Now, go inside the google_login
folder, but before going to creating files, you have to download the Google APIs Client Library for PHP.
Extract the Google APIs Zip file and rename it to google-api
.
google_login folder structure

<?php
require 'google-api/vendor/autoload.php';
// Creating new google client instance
$client = new Google_Client();
// Enter your Client ID
$client->setClientId('YOUR_CLIENT_ID');
// Enter your Client Secrect
$client->setClientSecret('YOUR_CLIENT_SECRECT');
// Enter the Redirect URL
$client->setRedirectUri('http://localhost/google_login/login.php');
// Adding those scopes which we want to get (email & profile Information)
$client->addScope("email");
$client->addScope("profile");
if(isset($_GET['code'])):
$token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
$client->setAccessToken($token['access_token']);
// getting profile information
$google_oauth = new Google_Service_Oauth2($client);
$google_account_info = $google_oauth->userinfo->get();
// showing profile info
echo "<pre>";
var_dump($google_account_info);
else:
// Google Login Url = $client->createAuthUrl();
?>
<a class="login-btn" href="<?php echo $client->createAuthUrl(); ?>">Login</a>
<?php endif; ?>
Saving profile information in the Database & making login action
Start your MySQL server or start phpMyAdmin and create a new Database called – google_login
After creating the database now use the following SQL code to create users
table & the structure of the users
table.
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`google_id` varchar(150) COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`email` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
`profile_image` text COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `google_id` (`google_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
<?php
session_start();
session_regenerate_id(true);
// change the information according to your database
$db_connection = mysqli_connect("localhost","root","","google_login");
// CHECK DATABASE CONNECTION
if(mysqli_connect_errno()){
echo "Connection Failed".mysqli_connect_error();
exit;
}
<?php
require 'db_connection.php';
if(isset($_SESSION['login_id'])){
header('Location: home.php');
exit;
}
require 'google-api/vendor/autoload.php';
// Creating new google client instance
$client = new Google_Client();
// Enter your Client ID
$client->setClientId('YOUR_CLIENT_ID');
// Enter your Client Secrect
$client->setClientSecret('YOUR_CLIENT_SECRECT');
// Enter the Redirect URL
$client->setRedirectUri('http://localhost/google_login/login.php');
// Adding those scopes which we want to get (email & profile Information)
$client->addScope("email");
$client->addScope("profile");
if(isset($_GET['code'])):
$token = $client->fetchAccessTokenWithAuthCode($_GET['code']);
if(!isset($token["error"])){
$client->setAccessToken($token['access_token']);
// getting profile information
$google_oauth = new Google_Service_Oauth2($client);
$google_account_info = $google_oauth->userinfo->get();
// Storing data into database
$id = mysqli_real_escape_string($db_connection, $google_account_info->id);
$full_name = mysqli_real_escape_string($db_connection, trim($google_account_info->name));
$email = mysqli_real_escape_string($db_connection, $google_account_info->email);
$profile_pic = mysqli_real_escape_string($db_connection, $google_account_info->picture);
// checking user already exists or not
$get_user = mysqli_query($db_connection, "SELECT `google_id` FROM `users` WHERE `google_id`='$id'");
if(mysqli_num_rows($get_user) > 0){
$_SESSION['login_id'] = $id;
header('Location: home.php');
exit;
}
else{
// if user not exists we will insert the user
$insert = mysqli_query($db_connection, "INSERT INTO `users`(`google_id`,`name`,`email`,`profile_image`) VALUES('$id','$full_name','$email','$profile_pic')");
if($insert){
$_SESSION['login_id'] = $id;
header('Location: home.php');
exit;
}
else{
echo "Sign up failed!(Something went wrong).";
}
}
}
else{
header('Location: login.php');
exit;
}
else:
// Google Login Url = $client->createAuthUrl();
?>
<a class="login-btn" href="<?php echo $client->createAuthUrl(); ?>">Login</a>
<?php endif; ?>
<?php
require 'db_connection.php';
if(!isset($_SESSION['login_id'])){
header('Location: login.php');
exit;
}
$id = $_SESSION['login_id'];
$get_user = mysqli_query($db_connection, "SELECT * FROM `users` WHERE `google_id`='$id'");
if(mysqli_num_rows($get_user) > 0){
$user = mysqli_fetch_assoc($get_user);
}
else{
header('Location: logout.php');
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title><?php echo $user['name']; ?></title>
<style>
*,
*::before,
*::after {
box-sizing: border-box;
-webkit-box-sizing: border-box;
}
body{
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background-color: #f7f7ff;
padding: 10px;
margin: 0;
}
._container{
max-width: 400px;
background-color: #ffffff;
padding: 20px;
margin: 0 auto;
border: 1px solid #cccccc;
border-radius: 2px;
}
._img{
overflow: hidden;
width: 100px;
height: 100px;
margin: 0 auto;
border-radius: 50%;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
}
._img > img{
width: 100px;
min-height: 100px;
}
._info{
text-align: center;
}
._info h1{
margin:10px 0;
text-transform: capitalize;
}
._info p{
color: #555555;
}
._info a{
display: inline-block;
background-color: #E53E3E;
color: #fff;
text-decoration: none;
padding:5px 10px;
border-radius: 2px;
border: 1px solid rgba(0, 0, 0, 0.1);
}
</style>
</head>
<body>
<div class="_container">
<div class="_img">
<img src="<?php echo $user['profile_image']; ?>" alt="<?php echo $user['name']; ?>">
</div>
<div class="_info">
<h1><?php echo $user['name']; ?></h1>
<p><?php echo $user['email']; ?></p>
<a href="logout.php">Logout</a>
</div>
</div>
</body>
</html>
<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();
// Unset all of the session variables.
$_SESSION = array();
// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// Finally, destroy the session.
session_destroy();
header("Location: login.php");
exit;
?>
Now test the application. Open –
http://localhost/google_login/login.php
it was hard to understand for a beginner but you explained it very well. thanks for the information it helped me a lot.
thanks, well explained
Giving error, please check this screenshot – https://prnt.sc/Q7YQyRgIcLGp
Try this solution.