2015-12-31 2 views
1

Я регистрирую пользователя, использующего логин Google. Я включил все необходимые файлы, необходимые для входа в Google. Я создал скрипт PHP для входа в систему. У меня есть вся информация об аутентификации и перенаправлении. Тем не менее, я не понимаю, почему я не получаю поле электронной почты, которое я получаю от googleClient в своей сессии. Пожалуйста помоги.Как получить этот сеанс, работающий в php Google login?

Вот мой код:

<?php 

$google_client_id  = '#########.apps.googleusercontent.com'; 
$google_client_secret = 'xxxxxxxxxxxxxxxxxxx'; 
$google_redirect_url = 'http://localhost/project/profile.php'; 
$google_developer_key = ''; 

//include google api files 
require_once '../src/Google_Client.php'; 
require_once '../src/contrib/Google_Oauth2Service.php'; 

session_start(); 

$gClient = new Google_Client(); 
$gClient->setClientId($google_client_id); 
$gClient->setClientSecret($google_client_secret); 
$gClient->setRedirectUri($google_redirect_url); 

$google_oauthV2 = new Google_Oauth2Service($gClient); 

if (isset($_REQUEST['reset'])) 
{ 
    unset($_SESSION['token']); 
    $gClient->revokeToken(); 
    header('Location: ' . filter_var($google_redirect_url, FILTER_SANITIZE_URL)); 
} 

if (isset($_GET['code'])) 
{ 
    $gClient->authenticate($_GET['code']); 
    $_SESSION['token'] = $gClient->getAccessToken(); 
    header('Location: ' . filter_var($google_redirect_url, FILTER_SANITIZE_URL)); 
    return; 
} 


if (isset($_SESSION['token'])) 
{ 
     $gClient->setAccessToken($_SESSION['token']); 
} 


if ($gClient->getAccessToken()) 
{ 
     //Get user details if user is logged in 
     $user     = $google_oauthV2->userinfo->get(); 
     $user_id    = $user['id']; 
     $user_name   = filter_var($user['name'], FILTER_SANITIZE_SPECIAL_CHARS); 
     $email    = filter_var($user['email'], FILTER_SANITIZE_EMAIL); 
     $profile_url   = filter_var($user['link'], FILTER_VALIDATE_URL); 
     $profile_image_url = filter_var($user['picture'], FILTER_VALIDATE_URL); 
     $personMarkup   = "$email<div><img src='$profile_image_url?sz=50'></div>"; 
     $_SESSION['token'] = $gClient->getAccessToken(); 
     $_SESSION['email'] = $email; 
} 
else 
{ 
    //get google login url 
    $authUrl = $gClient->createAuthUrl(); 
} 

?> 

Мой profile.php выглядит так -

Это приводит - Notice: Undefined индекс: электронная почта на линии 4

После этого запускается сценарий, элемент управления переходит на следующую страницу, где говорится, что письмо не найдено в сеансе. Должен ли я создать новый Google_Client()? Каков правильный способ выполнения этой серии взаимодействий после входа в систему?

+0

мне нужно, чтобы включить эти строки в каждой странице делать .. ?? $ gClient = новый Google_Client(); $ gClient-> setClientId ($ google_client_id); $ gClient-> setClientSecret ($ google_client_secret); $ gClient-> setRedirectUri ($ google_redirect_url); Пожалуйста, помогите кому-нибудь. – Nevermore

+0

Вы пытаетесь выполнить аутентификацию на своем локальном сервере? – Kamal

+0

Да Я аутентифицирую пользователя на своем локальном сервере – Nevermore

ответ

0
  1. Прежде всего, он будет работать на локальном хосте, без проблем. Потому что я только что создал логин google и facebook, и он отлично работает.
  2. вам нужно добавить ключ клиента ClientID и клиентский ключ от разработчика Google консоли, где вы создали веб-приложение и ключ ouath.

В главной странице входа вы можете перенаправить на другую страницу ...

/*! \brief Configure the client object 
* Exchange authorization code for refresh and access tokens 
*/ 
if (isset($_GET['code'])) { 
    $gClient->authenticate($_GET['code']); 
    $_SESSION['token'] = $gClient->getAccessToken();  /**< retrieve the access token with the getAccessToken method */ 
    header('Location: ' . filter_var($redirectURL, FILTER_SANITIZE_URL)); /**< Redirect the user to $auth_url: */ 
} 
if (isset($_SESSION['token'])) { 
    $gClient->setAccessToken($_SESSION['token']); /**< apply an access token to a new Google_Client object */ 
} 

$authUrl = $gClient->createAuthUrl(); /**< Generate a URL to request access from Google's OAuth 2.0 server */ 

Попробуйте это ..

+0

Спасибо за ответ. – Nevermore

Смежные вопросы