Home » Php » php – How do I retrieve user's email from Google

php – How do I retrieve user's email from Google

Posted by: admin July 12, 2020 Leave a comment

Questions:

I am using the Google client library in PHP.
I am successfully authenticated.
Missing a simple thing (I added the right scope). How do I retrieve
the user’s email after I finish the auth process.
Below is what I have:

$client = new Google_Client();
$client->setClientId(MYCLIENTID);
$client->setClientSecret(MYSECRET);
$client->setRedirectUri(SOMEURLINMYSYSTEM);
$service = new Google_Service_Oauth2($client);
$client->addScope(Google_Service_Oauth2::USERINFO_EMAIL);
$client->authenticate($_GET['code']);//I have the right code, and I am being authenticated

//TODO Get from google the user's email ?????????

I am using the PHP library here:
https://code.google.com/p/google-api-php-client/wiki/OAuth2

How to&Answers:

oops, just found it:

$client = new Google_Client();
$client->setClientId(MYCLIENTID);
$client->setClientSecret(MYSECRET);
$client->setRedirectUri(SOMEURLINMYSYSTEM);
$service = new Google_Service_Oauth2($client);
$client->addScope(Google_Service_Oauth2::USERINFO_EMAIL);
$client->authenticate($_GET['code']);//I have the right code, and I am being authenticated

$client->authenticate($code);
$plus = new Google_Service_Plus($client);
$person = $plus->people->get('me');
var_dump($person);

Answer:

Much more simple, you can do it like this:

$user = $service->userinfo->get();

echo $user->name;
echo $user->id;
echo $user->email;
echo $user->link;
echo $user->picture;

Answer:

$plus = new Google_Service_Plus($client);
$person = $plus->people->get('me');
$email = ($person['emails'][0]['value']);

For this to work, also don’t forget scopes:

$client->addScope('https://www.googleapis.com/auth/userinfo.email');
$client->addScope('https://www.googleapis.com/auth/userinfo.profile');
// $client->addScope(Google_Service_Plus::PLUS_ME);

Answer:

Google OAuth 2 – Get User Email

$client = new Google_Client();
$client->addScope(Google_Service_Plus::USERINFO_EMAIL);
$client->addScope(Google_Service_Plus::USERINFO_PROFILE);

$tokeninfo = $client->verifyIdToken();
echo $tokeninfo->name;
echo $tokeninfo->email;

Update: Seems like this is available only during valid “access token” (first login).

If you have setAccessType(“offline”) and setApprovalPrompt(“auto”), then “name” property will not be later available and you need to use Google Plus like mentioned in above posts.