2010-07-13 15 views
5

Me estoy confundiendo.Obteniendo una dirección de gmail con ... openid? ¿oauth?

Pude hacer que el inicio de sesión abierto funcionara un poco usando LightOpenID.

Todo lo que consigo es solo openid_identity como "https://www.google.com/accounts/o8/id?id=xxx". Bastante decepcionante: esperaba obtener la dirección de correo electrónico también.

decir necesito iniciar sesión (que es lo que hace openid) y conocer la dirección de correo electrónico de la cuenta de Google del usuario que se utiliza para iniciar sesión.

No es la función $openid->getAttributes() pero todo lo que recibo de que es sólo una matriz vacía: Creo que Google no se me va a dar algo más que eso openid_identity.

Supongo que Se supone que debo usar OAuth, ¿verdad? No tengo ni idea de eso. sólo he encontrado documentación horrible y confuso, que, o bien pretende explicar todo lo (y lo hacen significa todo ), o cuando no explicar nada en absoluto.

Sí, por supuesto que he tratado de ver las publicaciones anteriores sobre eso, al igual que hice la búsqueda en google. Lea de nuevo el párrafo anterior, por favor.

+0

tenga a bien mi pregunta (podría serle útil) aquí: http://stackoverflow.com/questions/2667447/how-to-use-the-correct-google-openid-url-to-login -to-my-site Así que hasta donde yo sé, esa es la forma en que es para OpenID en gmail, no se puede tener su dirección de gmail expresivamente como parte de su OpenID –

+0

gracias. Si eso es así, volvemos a la segunda parte de la pregunta: 'OAuthWTF'? –

Respuesta

10

Acabo de descubrir LightOpenID y creo que es maravilloso.Me las he arreglado para obtener la dirección de correo electrónico, el nombre y apellido y el idioma preferido utilizando la siguiente modificación de example-gmail.php:

<?php 

require_once('openid.php'); 

if (empty($_GET['openid_mode'])) 
{ 
    if (isset($_GET['login'])) 
    { 
     $openid = new LightOpenID(); 
     $openid->identity = 'https://www.google.com/accounts/o8/id'; 
     $openid->required = array('namePerson/first', 'namePerson/last', 'contact/email', 'pref/language'); 

     header('Location: ' . $openid->authUrl()); 
     //header('Location: ' . str_replace('&amp;', '&', $openid->authUrl())); 
    } 

    else 
    { 
     echo '<form action="?login" method="post">' . "\n"; 
     echo '<button>Login with Google</button>' . "\n"; 
     echo '</form>' . "\n"; 
    } 
} 

else if ($_GET['openid_mode'] == 'cancel') 
{ 
    echo 'User has canceled authentication!'; 
} 

else 
{ 
    $openid = new LightOpenID(); 

    echo 'User ' . ($openid->validate() ? $_GET['openid_identity'] . ' has ' : 'has not ') . 'logged in.'; 

    echo '<pre>'; 
    print_r($openid->getAttributes()); 
    echo '</pre>'; 
} 

?> 

He cambiado el código para que sea un poco más fácil de leer, la salida:

User https://www.google.com/accounts/o8/id?id=*** has logged in. 

Array 
(
    [namePerson/first] => Alix 
    [contact/email] => ***@gmail.com 
    [pref/language] => en 
    [namePerson/last] => Axel 
) 

Todavía no puedo obtener el código postal y otros de Google, pero he tenido éxito con myOpenID.com.

+0

Gracias, pero mi pregunta es: ¿dónde puedo encontrar la lista de atributos 'obligatorios'? Solo pude encontrar la lista de 'openix.ax.wtf', pero no tengo idea de cómo usarlos en LightOpenID ...:/ –

+0

Oh, aquí está -> http://www.axschema.org/types/... aún así, ¿hay alguna manera de preguntarle a Google cuál de estos campos va a exportar? ¿O simplemente probarlos todos y algunos funcionarán mientras que otros no? –

+0

¿LightOpenID almacena la solicitud que realizó en 'if (isset ($ _ GET ['login']))'? No parece, sin embargo, debería (por razones de rendimiento). En el caso de Google, es indiferente, pero puede no serlo si el identificador proporcionado por el usuario (USI) es el identificador reclamado (CI). Digamos que ingresas myusername.myopenid.com. En la fase de descubrimiento para esa url, descubres que la URL del punto final que responde con autoridad para ese identificador. Si no guarda esa información, en la segunda fase deberá verificar nuevamente si el punto final tiene autoridad sobre el IC. – Artefacto

1

Tener una cuenta de Google no significa que usted obtenga una cuenta de Gmail. You can start a Google account with any email address.

Habiendo dicho que no creo que sea parte de la especificación para devolver direcciones de correo electrónico o datos de inicio de sesión como parte de la identidad.

+1

buen punto. Me gustaría obtener * esa * dirección de correo electrónico, no importa si no es gmail. –

5

Usted puede utilizar Exchange atributo de OpenID. Consulte la documentación de Google here (en particular, openid.ax.type.email).

+1

¡genial! Si bien no pude entender cómo "asignar" esos atributos, como 'openid.ax.type.email' a los diferentes de LightOpenID ('contact/email'), sabiendo que * podría * hacerse, miré más profundamente La documentación de LightOpenID y yo logramos hacerlo :) gracias –

Cuestiones relacionadas