Вход в Google+ через Javascript и PHP

Подскажите, пожалуйста, как я могу получить данные пользователя (имя, адрес электронной почты) через Google+ Javascript/Php API? Я следую этому руководству, в котором описывается, как получить authResult['code'] через Javascript.

Это нормально у меня есть. Я отправляю его на сервер через Ajax, но не знаю, как получить пользовательские данные, такие как имя и адрес электронной почты, через PHP, НО без каких-либо перенаправлений. Вот примеры кода Javascript:

function googleStart()
{
    console.log('googleStart');
    gapi.load('auth2', function()
    {
        auth2 = gapi.auth2.init({
            client_id: '811214467813-v3fmui5dfghte5m0kmohsf6dl11ori3tg.apps.googleusercontent.com',
            // Scopes to request in addition to 'profile' and 'email'
            fetch_basic_profile: false,
            scope: 'profile email'
        });
    });
}

function googleSignIn(authResult)
{
    console.log(authResult);

    if (authResult['code']) {

        console.log(authResult);

        // Hide the sign-in button now that the user is authorized, for example:
        $('#signinButton').attr('style', 'display: none');

        // Send the code to the server
        $.ajax({
            type: 'POST',
            url : "{link :Signgoogle:in}",
            accepts : 'json',
            // Spýtať sa na DJPW čo to tu je zakomentované
            //contentType: 'application/octet-stream; charset=utf-8',
            //processData: false,
            data : {
                'code' : authResult['code'],
                'id_token' : authResult.getAuthResponse().id_token
            },
...

PHP:

public function actionIn()
{
    $code = $_POST['code'];

    $client = new \Google_Client();
    $client->setClientId(self::APP_ID);
    $client->setClientSecret(self::APP_SECRET);
    $client->setRedirectUri(self::REDIRECT_URI);

    $client->authenticate($code);
    $access_token = $client->getAccessToken();
    $client->setAccessToken($access_token);

    $client->getAuth();


    $data = $access_token;

    if($data)
    {
        $this->sendJson(array($data));
    }
    else
    {
        $data = array('error' => '$client->verifyIdToken($id) skočil chybou.');
        $this->sendJson($data);
    }

}
....

PHP извлекает access_token, но не данные пользователей. Конечно, это вызов ajax, поэтому я не могу выполнять перенаправления, как Google описывает на каждой странице. Можете ли вы помочь мне, пожалуйста, я не могу найти никакого решения.

Большое Вам спасибо.


person Čamo    schedule 04.07.2015    source источник


Ответы (2)


После того, как у вас есть аутентифицированный клиент для пользователя, вы можете сделать запрос к метод Google+ people.get API.

$client = new Google_Client();
$client->setClientId(CLIENT_ID);
$client->setClientSecret(CLIENT_SECRET);
$client->setRedirectUri(REDIRECT_URI);
$client->setAccessToken($access_token);
$plus = new Google_Service_Plus($client);
$me = $plus->people->get('me');
print "ID: {$me['id']}\n";
print "Display Name: {$me['displayName']}\n";
print "Image Url: {$me['image']['url']}\n";
print "Url: {$me['url']}\n";

Для их электронной почты вам придется перебрать $me['emails'] массив и найдите значение с помощью type=account.

person abraham    schedule 05.07.2015
comment
Сначала спасибо. Но откуда взялась переменная $plus? Это пример чего? Я не ведьма. - person Čamo; 08.07.2015
comment
Я нашел этот код: $plus = new \Google_PlusService($client); но выдает исключение: класс «Google_PlusService» не найден. Я установил Google API через Composer: require: {google/apiclient: 1.0.*@beta} - person Čamo; 08.07.2015
comment
Это безумие!!! Кажется, правильная форма $plus = new \Google_Service_Plus($client); - person Čamo; 09.07.2015
comment
Извините, я, должно быть, пропустил пару строк, скопировав код. Я обновил вопрос с тем, что должно работать. - person abraham; 09.07.2015

если вы не используете клиентскую библиотеку Google, вы можете использовать этот API Google. Для получения сведений о клиенте вы просто передаете токен этому API https://www.googleapis.com/oauth2/v3/tokeninfo?id_token= ‹ your_token >

$response = file_get_contents ( 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=' . $_REQUEST['token'] );

$response = json_decode ( $response );

echo "<pre>";
print_r ( $response );
echo "</pre>";

Это аутентифицирует пользователя и вернет объект

stdClass Object
(
    [iss] => accounts.google.com
    [at_hash] => hE0R********nxg
    [aud] => 79*********************p.apps.googleusercontent.com
    [sub] => 1028*****2
    [email_verified] => true
    [azp] => 7945823****p.apps.googleusercontent.com
    [email] => bik***@gmail.com
    [iat] => 14***7
    [exp] => 1***07
    [name] => Bik****M
    [picture] => https://lh6.googleusercontent.com/-W8cA***/photo.jpg
    [given_name] => Bike***
    [family_name] => M
    [locale] => en
    [alg] => RS256
    [kid] => 70f6c4267*******cb
)

пример можно найти здесь: http://wiki.workassis.com/implementing-google-sign-in-for-websites

person Bikesh M    schedule 29.06.2016