Постоянный Google OpenID + OAuth? - PullRequest
7 голосов
/ 20 мая 2011

Я работаю над веб-приложением, для которого потребуется довольно частый доступ к API данных Google, поэтому я решил использовать метод «OAuth с федеративным входом (гибридный протокол)», чтобы пользователи могли войти в приложение. Я получил http://googlecodesamples.com/hybrid/ (после некоторых настроек совместимости с PHP 5.3) и смог получить токен доступа. Какой следующий шаг? Как мне использовать этот токен доступа?

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

Релевантно: этому приложению также необходим REST API, для которого я планировал использовать OAuth. Любая рекомендация о том, как связать это с аутентификацией для реального приложения?

1 Ответ

8 голосов
/ 27 мая 2011

Я использую для этого библиотеку PHP LightOpenID ( см. На странице ).Он обрабатывает весь поток аутентификации для нас.Вам не нужно беспокоиться о токене и прочем.

Вот страница, где я отображаю ссылку «Войти в Google»:

<?php
require_once 'openid.php';
$openid = new LightOpenID;

$openid->identity = 'https://www.google.com/accounts/o8/id';
$openid->required = array('contact/email');
$openid->returnUrl = 'http://my-website.com/landing-login.php'
?>

<a href="<?php echo $openid->authUrl() ?>">Login with Google</a>

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

Затем он будет перенаправлен на целевую страницу $openid->returnUrl.Код для этой страницы должен быть:

<?php
require_once 'openid.php';
$openid = new LightOpenID;

if ($openid->mode) {
    if ($openid->mode == 'cancel') {
        // User has canceled authentication
    } elseif($openid->validate()) {
        // Yeah !
        $data = $openid->getAttributes();
        $email = $data['contact/email'];
    } else {
        // The user has not logged in via Google
    }
} else {
    // The user does not come from the link of the first page
}
?>

Если вы хотите получить больше информации от пользователя, вам нужно добавить их к $openid->required на первой странице.Например:

$openid->required = array(
  'contact/email',
  'namePerson/first',
  'namePerson/last'
);

позволит вам, если пользователь примет это, получить его имя и фамилию также на второй странице:

$name = $data['namePerson/first'] . " " . $data['namePerson/last'];

Затем для Oauthчасть, вы можете следовать инструкциям этого выпуска LightOpenID .

...