2011-05-20 21 views
7

Estoy trabajando en una aplicación web que requerirá un poco el acceso frecuente a las API de datos de Google, por lo que decidí ir con el "OAuth con el acceso federado (Protocolo híbrido)" método para los usuarios iniciar sesión en la aplicación. Obtuve el http://googlecodesamples.com/hybrid/ funcionamiento (después de algunos ajustes para la compatibilidad con PHP 5.3) y puedo obtener un token de acceso. ¿Cuál es el siguiente paso? ¿Cómo uso este token de acceso?Google OpenID + OAuth persistente?

Parece que voy a tener que crear una sesión local para el usuario navegar por el resto de la aplicación. ¿Será necesario que esto sea completamente independiente del inicio de sesión de Google o cómo lo manejarías?

Relevante: esta aplicación también tiene una API REST, para el que estaba planeando usar OAuth. ¿Alguna recomendación sobre cómo vincular esto con la autenticación de la aplicación real?

Respuesta

8

estoy usando la librería PHP LightOpenID (see on gitorious) para eso. Maneja todo el flujo de autenticación para nosotros. No necesitas preocuparte por token y esas cosas.

Aquí la página donde puedo mostrar la "Inicio de sesión con Google" link:

<?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> 

Cuando el clic en el enlace, una página de Google aparecerá pedirle que autenticar y/o autorizar que para recuperar su correo electrónico .

Entonces será redirigir a la página de destino $openid->returnUrl. El código de esa página debe ser:

<?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 
} 
?> 

Si desea recuperar más información por parte del usuario, tiene que añadirlos a $openid->required en la primera página. Por ejemplo:

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

le permitirá, si el usuario lo acepta, para obtener sus nombres y apellidos, así como en la segunda página:

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

Entonces, para la parte Oauth, puede siga las instrucciones de this LightOpenID issue.

Cuestiones relacionadas