2010-07-13 18 views
5

Mi sto confondendo.Ottenere un indirizzo Gmail con ... openid? OAuth?

Sono stato in grado di rendere l'accesso openid un lavoro con LightOpenID.

Tutto ciò che faccio è solo uno openid_identity come "https://www.google.com/accounts/o8/id?id=xxx". Piuttosto deludente: mi aspettavo di ottenere anche l'indirizzo email.

cioè ho bisogno di effettuare il login (che è quello che fa OpenID) e conoscere l'indirizzo e-mail del account Google l'utente utilizzato per effettuare il login.

c'è la funzione $openid->getAttributes() ma tutto quello che ottiene da questo è solo un array vuoto: Credo che Google non ha intenzione di darmi qualsiasi altra cosa di quello openid_identity.

Quindi I indovinare Io dovrei usare OAuth, giusto? Non ne ho idea. Ho trovato solo la documentazione orribile e confuso, che o finge di spiegare tutto (e io fare significa tutto), o non riesce spiegare nullaaffatto.

Sì, certo che ho provato a guardare i post precedenti a riguardo, proprio come ho fatto su Google. Leggi di nuovo il paragrafo precedente, per favore.

+0

si prega di dare un'occhiata alla mia domanda (potrebbe essere utile a voi) qui: http://stackoverflow.com/questions/2667447/how-to-use-the-correct-google-openid-url-to-login -to-my-site Quindi, per quanto ne so, è così che funziona con OpenID su Gmail, non è possibile avere il tuo indirizzo Gmail espressamente come parte del tuo OpenID –

+0

grazie. Se è così torniamo alla seconda parte della domanda: 'OAuthWTF'? –

risposta

10

Ho appena scoperto LightOpenID e penso sia meraviglioso.Sono riuscito a ottenere l'indirizzo e-mail, il nome e cognome e la lingua preferita utilizzando la seguente modifica di 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>'; 
} 

?> 

ho cambiato il codice per renderlo un po 'più leggibile, l'output:

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 
) 

Non riesco ancora a ottenere il codice postale e altri da Google ma ho avuto successo con myOpenID.com.

+0

Grazie, ma la mia domanda è: dov'è l'elenco degli attributi 'required' che posso chiedere? Ho potuto trovare solo la lista di openix.ax.wtf', ma non ho idea di come usarli in LightOpenID ...:/ –

+0

Oh, eccolo -> http://www.axschema.org/types/... ancora, c'è un modo per chiedere a Google quale di questi campi verrà esportato? Oppure provateli tutti e alcuni funzioneranno mentre altri no? –

+0

LightOpenID memorizza la richiesta effettuata in 'if (isset ($ _ GET ['login']))'? Non sembra, ma dovrebbe (per motivi di prestazioni). Nel caso di Google, è indifferente, ma potrebbe non esserlo se l'identificatore fornito dall'utente (USI) è l'identificatore richiesto (CI). Diciamo che inserisci myusername.myopenid.com. Nella fase di individuazione di quell'URL, si scopre che l'URL dell'endpoint risponde in modo autoritario per quell'identificatore. Se non si salvano tali informazioni, nella seconda fase è necessario verificare nuovamente se l'endpoint ha autorità sull'elemento della configurazione. – Artefacto

1

Avere un account Google non significa che si ottiene un account Gmail. You can start a Google account with any email address.

Detto questo, non penso che faccia parte delle specifiche per restituire indirizzi email o dati di accesso come parte dell'identità.

+1

buon punto. Mi piacerebbe avere * quell' * indirizzo email, non importa se non è Gmail. –

5

È possibile utilizzare l'attributo di scambio OpenID. Consulta la documentazione di Google here (in particolare, openid.ax.type.email).

+1

fantastico! Mentre non ero in grado di capire come "mappare" quegli attributi come 'openid.ax.type.email' a quelli di LightOpenID (' contact/email'), sapendo che * potrebbe * essere fatto ho guardato più in profondità La documentazione di LightOpenID e sono riuscito a farlo :) grazie –

Problemi correlati