Friday, 27 September 2019

How to make Login with Google Account using PHP



Now a days in the world of internet, as we know social media is an very import part of any web based application. So if your web application has provide feature like login with social media, then it will be gaining more new users to your web application. So, in this post we have share tutorial on how to login or sign in or register with Google Account in your PHP web application. Here we will make system in which user can login with their Google account into your website.

For login with Google Account using PHP, Google has provide Google OAuth API, which is very easy and helpful to you for implement login using Google account into your Website. Google Login API has provide rights to user to login into the website by using their Google account credential without register on that particular website. By using this feature, your website will gain more subscriber, this is because in current days most of all users have a Google Account, so they can login with their Google Account without sign in on your website.

In this tutorial, we will use Google OAuth Login API, this API give permission to users to login with their existing Google accounts to your website. Below you can find how to integrate Google Login API in your PHP website and you can also find the process how to get API key and how to integrate Google Client Library in your existing PHP library for Login.





Get Google API Credential


First we need to get Google API keys, for this first you have Google Account. So, login into your Google Account and follow below step.

1 - Go to https://console.developers.google.com/ this link.
2 - After this click on Create New Project link for create new project.


3 - Enter Project Name and click on Create button.

4 - Once you have create new project then you can see your project list on web page.

5 -After this click on Google API logo for go to home page.





6 - Once you have redirect to home page then select project from the project select box.


7 - After click on project select box, then one modal will popup and under this you can find list of project, so select your project.


8 - Now from left menu, you have to click on OAuth consent screen.
9 - Once you have click on OAuth consent screen, then one page will load, here you have to define application name and after this click on save button.


10 - When you have click on save button, then after page will redirect another page, and here you have to click on Create credential button, so one drop down menu will appear and from this you have to select OAuth client ID.


11 - After click on OAuth client ID menu then you have redirect to another page, and here you can find different Application type.


12 - From different Application type option, you have to select Web application. Once you have select Web application option, then one form will appear on web page. Here you have to define Name and you have also define Authorized redirect URIs field and lastly click on Create button.


13 - Once you have click on create button, then you can get your Client ID and your client secret key. You have to copy both key for future use for implement Login using Google account using PHP.


Download Google API Client Library for PHP


After getting Google API key, now we need to download Google API Client Library for PHP. For this we have to go command prompt and first type composer command, after this we need to run following command.


composer require google/apiclient:"^2.0"


This command will download Google API Client Library for PHP in your define directory. Now we have proceed for PHP code for how to use Google API Client Library for login using Google account with PHP.

config.php



<?php

//config.php

//Include Google Client Library for PHP autoload file
require_once 'vendor/autoload.php';

//Make object of Google API Client for call Google API
$google_client = new Google_Client();

//Set the OAuth 2.0 Client ID
$google_client->setClientId('1034286712318-kv0gapfqro1aijq84ed72r4aqqs8nan8.apps.googleusercontent.com');

//Set the OAuth 2.0 Client Secret key
$google_client->setClientSecret('Dzq5Xd3olizoZkKjk_SJCWQ1');

//Set the OAuth 2.0 Redirect URI
$google_client->setRedirectUri('http://localhost/tutorial/php-login-using-google-demo/index.php');

//
$google_client->addScope('email');

$google_client->addScope('profile');

//start session on web page
session_start();

?>


index.php



<?php

//index.php

//Include Configuration File
include('config.php');

$login_button = '';

//This $_GET["code"] variable value received after user has login into their Google Account redirct to PHP script then this variable value has been received
if(isset($_GET["code"]))
{
 //It will Attempt to exchange a code for an valid authentication token.
 $token = $google_client->fetchAccessTokenWithAuthCode($_GET["code"]);

 //This condition will check there is any error occur during geting authentication token. If there is no any error occur then it will execute if block of code/
 if(!isset($token['error']))
 {
  //Set the access token used for requests
  $google_client->setAccessToken($token['access_token']);

  //Store "access_token" value in $_SESSION variable for future use.
  $_SESSION['access_token'] = $token['access_token'];

  //Create Object of Google Service OAuth 2 class
  $google_service = new Google_Service_Oauth2($google_client);

  //Get user profile data from google
  $data = $google_service->userinfo->get();

  //Below you can find Get profile data and store into $_SESSION variable
  if(!empty($data['given_name']))
  {
   $_SESSION['user_first_name'] = $data['given_name'];
  }

  if(!empty($data['family_name']))
  {
   $_SESSION['user_last_name'] = $data['family_name'];
  }

  if(!empty($data['email']))
  {
   $_SESSION['user_email_address'] = $data['email'];
  }

  if(!empty($data['gender']))
  {
   $_SESSION['user_gender'] = $data['gender'];
  }

  if(!empty($data['picture']))
  {
   $_SESSION['user_image'] = $data['picture'];
  }
 }
}

//This is for check user has login into system by using Google account, if User not login into system then it will execute if block of code and make code for display Login link for Login using Google account.
if(!isset($_SESSION['access_token']))
{
 //Create a URL to obtain user authorization
 $login_button = '<a href="'.$google_client->createAuthUrl().'"><img src="sign-in-with-google.png" /></a>';
}

?>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <title>PHP Login using Google Account</title>
  <meta content='width=device-width, initial-scale=1, maximum-scale=1' name='viewport'/>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
  
 </head>
 <body>
  <div class="container">
   <br />
   <h2 align="center">PHP Login using Google Account</h2>
   <br />
   <div class="panel panel-default">
   <?php
   if($login_button == '')
   {
    echo '<div class="panel-heading">Welcome User</div><div class="panel-body">';
    echo '<img src="'.$_SESSION["user_image"].'" class="img-responsive img-circle img-thumbnail" />';
    echo '<h3><b>Name :</b> '.$_SESSION['user_first_name'].' '.$_SESSION['user_last_name'].'</h3>';
    echo '<h3><b>Email :</b> '.$_SESSION['user_email_address'].'</h3>';
    echo '<h3><a href="logout.php">Logout</h3></div>';
   }
   else
   {
    echo '<div align="center">'.$login_button . '</div>';
   }
   ?>
   </div>
  </div>
 </body>
</html>


logout.php



<?php

//logout.php

include('config.php');

//Reset OAuth access token
$google_client->revokeToken();

//Destroy entire session data.
session_destroy();

//redirect page to index.php
header('location:index.php');

?>


So, this is complete process for How to use Google API Client library for PHP Login by using Google account.

35 comments:

  1. Sir I want source code please provide me source code of How to make Login with Google Account using PHP

    ReplyDelete
  2. i can not dowload by composer.can you make video support for using composer.thanks you .

    ReplyDelete
  3. al error: Uncaught GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) in D:\wamp64\www\mobiles\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 201
    ( ! ) GuzzleHttp\Exception\RequestException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) in D:\wamp64\www\mobiles\vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php on line 201
    Call Stack
    # Time Memory Function Location
    1 0.0002 407368 {main}( ) ...\google_login.php:0
    2 0.0014 424776 Google_Client->fetchAccessTokenWithAuthCode( ) ...\google_login.php:14
    3 0.0495 526256 Google\Auth\OAuth2->fetchAuthToken( ) ...\Client.php:195
    4 0.0502 603600 Google\Auth\HttpHandler\Guzzle6HttpHandler->__invoke( ) ...\OAuth2.php:502
    5 0.0502 603600 GuzzleHttp\Client->send( ) ...\Guzzle6HttpHandler.php:34
    6 0.2485 642968 GuzzleHttp\Promise\RejectedPromise->wait( ) ...\Client.php:106



    show This Error Please Help Me out

    ReplyDelete
  4. Thanks, it was easy to implement in my project and I don't get any mistakes, greetings from Colombia.

    ReplyDelete
  5. Hello, first thanks for the info google login. I have a page and I have not yet managed to link which index data to which php? Maybe you can help me if you can.

    ReplyDelete
  6. Hi,

    i'm be able to validate against google with your code. Google returns to me a code:

    Part of the code: 4/vQGVOcq00o0eYuvj_zWJnR-C3LVQmD7H1YymMZjFyKBa.......

    But the problems is with the line:

    $token = $google_client->fetchAccessTokenWithAuthCode($_GET["code"]);

    It's returns error.... var_dump($token);

    { ["error"]=> string(14) "invalid_client" ["error_description"]=> string(12) "Unauthorized" }

    The aplications works from your demo page.

    can you help me, please?

    ReplyDelete
  7. when i was writing $_SESSION['user_gender'] its showing error. while all the data from session is correct.

    ReplyDelete
  8. This is really helpful, but there's still one thing I want to know,your CMS does not allow php, how do you cope with this? Or do you send members to another platform for registration?

    ReplyDelete
  9. Thank you thank you very much. you are a great.

    ReplyDelete
  10. vendor/autoload.php) where is it ?

    ReplyDelete
  11. I love this kind of posts. Straight to the Point.

    ReplyDelete
  12. hi sir, i am try same step but not working please help us. Error: redirect_uri_mismatch

    The redirect URI in the request, https://meridosti.com/login-with.php?provider=Google, does not match the ones authorized for the OAuth client. To update the authorized redirect URIs, visit: https://console.developers.google.com/apis/credentials/oauthclient/441673219305-g8irofg7mks7v7i5r0cj7m6pk3g8cd8g.apps.googleusercontent.com?project=441673219305

    ReplyDelete
  13. Replies
    1. For logout, the line $google_client->revokeToken(); should be changed to $google_client->revokeToken($_SESSION[ 'access_token' ]);

      Delete
  14. could you please explain me why this error occur
    Warning: Unsupported declare 'strict_types' in C:\xampp\htdocs\goggleloginfinal\googleapi\vendor\monolog\monolog\src\Monolog\Logger.php on line 1

    ReplyDelete
  15. Warning: Unsupported declare 'strict_types' in C:\xampp\htdocs\goggleloginfinal\googleapi\vendor\monolog\monolog\src\Monolog\Logger.php on line 1

    ReplyDelete
  16. how can we store user data by gmail signin

    ReplyDelete
  17. HI, i followed steps, i got this error, Warning: require_once(vendor/autoload.php): failed to open stream: No such file or directory

    ReplyDelete
  18. Hi, thank you for all, it worked well for me.

    ReplyDelete
  19. Hi I followed same step and this working in local host but same code not working on live server.
    Error: Invalid Grant and Bad request

    ReplyDelete
  20. Fatal error: Uncaught GuzzleHttp\Exception\ClientException: Client error: `POST https://oauth2.googleapis.com/revoke` resulted in a `400 Bad Request` response: { "error": "invalid_request", "error_description": "Bad Request" } in C:\xampp\htdocs\login\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php:111 Stack trace: #0 C:\xampp\htdocs\login\vendor\guzzlehttp\guzzle\src\Middleware.php(66): GuzzleHttp\Exception\RequestException::create(Object(GuzzleHttp\Psr7\Request), Object(GuzzleHttp\Psr7\Response)) #1 C:\xampp\htdocs\login\vendor\guzzlehttp\promises\src\Promise.php(203): GuzzleHttp\Middleware::GuzzleHttp\{closure}(Object(GuzzleHttp\Psr7\Response)) #2 C:\xampp\htdocs\login\vendor\guzzlehttp\promises\src\Promise.php(156): GuzzleHttp\Promise\Promise::callHandler(1, Object(GuzzleHttp\Psr7\Response), Array) #3 C:\xampp\htdocs\login\vendor\guzzlehttp\promises\src\TaskQueue.php(47): GuzzleHttp\Promise\Promise::GuzzleHttp\Promise\{closure}() #4 C:\xampp\htdocs\login\vendor\guzzlehttp\promises\src\Promise.php(246) in C:\xampp\htdocs\login\vendor\guzzlehttp\guzzle\src\Exception\RequestException.php on line 111

    ReplyDelete
    Replies
    1. In logout.php adjust the following:
      $google_client->revokeToken($_SESSION['access_token']);

      Delete