2010-07-13 44 views
5

我感到困惑。使用... openid獲取Gmail地址? OAuth的?

我能夠使openid登錄有點工作使用LightOpenID

我所做的只是一個openid_identity,如「https://www.google.com/accounts/o8/id?id=xxx」。相當令人失望:我也希望獲得電子郵件地址。

我需要登錄(這就是OpenID的那樣)知道谷歌的電子郵件地址,帳戶使用的登錄用戶。

有函數$openid->getAttributes()但我從中得到的只是一個空的數組:我猜谷歌不會給我以外的東西openid_identity

所以我我應該使用OAuth,對不對? 我對此毫無頭緒。 我只發現了可怕的和困惑的文件,要麼假裝解釋一切(我意味着一切),或者不說明什麼

是的,當然,我試圖看看以前的文章,就像我在谷歌上搜索一樣。請再讀一遍上面的段落。

+0

請看看我的問題(可能對你有用的)位置:http://stackoverflow.com/questions/2667447/how-to-use-the-correct-google-openid-url-to-login -to-我的站點 所以基本上,據我所知,這是它的方式是如何進行的OpenID在Gmail中,你不能表現力有你的Gmail地址作爲您的OpenID – 2010-07-13 23:06:11

+0

感謝的一部分。如果這是我們回到問題的第二部分:'OAuthWTF'? – 2010-07-13 23:09:57

回答

10

我剛剛發現LightOpenID我覺得這很棒。我已經成功使用的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>'; 
} 

?> 

我改變了代碼,使其一點點的可讀性,輸出:

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 
) 

我仍然無法從Google獲取郵政編碼和其他人,但我已成功使用myOpenID.com

+0

謝謝,但我的問題是:我可能會問'required'屬性的列表在哪裏?我只能找到'openix.ax.wtf'列表,但我不知道如何在LightOpenID中使用它們:/ – 2010-07-14 10:22:38

+0

哦,這裏是 - > http://www.axschema.org/types/...仍然,有沒有辦法問谷歌哪些領域將出口?或者只是嘗試一下,有些會工作,有些則不會? – 2010-07-14 10:26:31

+0

LightOpenID是否存儲您在'if(isset($ _ GET ['login']))'中所做的請求?它似乎沒有,但它應該(出於性能原因)。對於Google來說,它是無關緊要的,但如果用戶提供的標識符(USI)是聲明的標識符(CI),則可能不是。假設你輸入myusername.myopenid.com。在該URL的發現階段,您會發現對該標識符進行權威響應的端點url。如果您不保存該信息,則在第二階段中,您必須再次檢查端點是否擁有CI的權限。 – Artefacto 2010-07-14 10:30:01

1

擁有Google帳戶並不意味着您會獲得一個Gmail帳戶。 You can start a Google account with any email address

話雖如此,我不認爲其規範的一部分返回電子郵件地址或登錄數據作爲身份的一部分。

+1

好點。我想獲得*那*電子郵件地址,如果它不是gmail,則無關緊要。 – 2010-07-13 23:11:36

5

可以使用的OpenID的屬性交換。請參閱Google文檔here(特別是openid.ax.type.email)。

+1

太棒了!雖然我無法理解如何將諸如'openid.ax.type.email'之類的屬性映射到LightOpenID的不同的屬性('contact/email'),知道它可以被完成,但我更深入瞭解LightOpenID的文檔,我設法做到這一點:)謝謝 – 2010-07-14 10:20:29

相關問題