2010-09-22 71 views
8

我是OpenID邏輯新手。我使用Cakebaker的CakePHP的OpenID組件,以及JanRain的PHP OpenID庫。有沒有更好的方式從提供者獲取OpenID的信息?

這一切都工作得很好,但我找不到一個詳盡的方式來檢索用戶信息取決於提供者和方法(sreg與ax)。所以這就是我想出的:

if ($axResponse) { 
    if (is_array($a = $axResponse->get('http://axschema.org/contact/email'))) { 
     $user_record['email'] = $a[0]; 
     if (is_array($b = $axResponse->get('http://axschema.org/namePerson'))) { 
      $user_record['nickname'] = $b[0]; 
     } 
    } else if (is_array($a = $axResponse->get('http://schema.openid.net/contact/email'))) { 
     $user_record['email'] = $a[0]; 
     if (is_array($b = $axResponse->get('http://schema.openid.net/namePerson'))) { 
      $user_record['nickname'] = $b[0]; 
     } 
    } 
} else if ($sreg) { 
    if (isset($sreg['email'])) { 
     $user_record['email'] = $sreg['email']; 
    } 
    if (isset($sreg['nickname'])) { 
     $user_record['nickname'] = $sreg['nickname']; 
    } 
} 

雖然我用Google測試過它,但是Yahoo!和美國在線的OpenID,我相信我會遇到其他/小型提供商的麻煩。有更好更好的方法來達到相同的效果嗎?這似乎特別有缺陷,如果我嘗試獲取其他可選字段...

回答

2

請保持在請注意,OpenID是用戶身份驗證的標準,而不是authori用於數據訪問。當然,您可以使用OpenID獲取特定的用戶信息,但這不是協議的主要意圖。 OAuth是授權標準,如果您需要獲取用戶數據,您可能需要從中開始。

+0

我完全同意你的意見,只要關閉這個問題並接受你的答案。幸運的是,自那時以來,事情發生了很大變化,OAuth2獲得了支持,現在,我只會使用它,並在大多數使用情況下使用OpenID完成。 – 2011-11-03 15:31:06

0

那麼我很抱歉...我不太瞭解「OpenID組件的CakePHP」,但我已與lightopenid它是開源也..

檢查了這一點: http://code.google.com/p/lightopenid/updates/list

我有過很多次合作..它是好的。我希望這有助於...

+0

不幸的是,這並沒有多大幫助,因爲一切都已正常工作。我更多地尋找一種優雅的方式來處理迴應,這是不包括在這個庫和它的文檔... – 2010-09-22 17:41:10

+0

沒問題,Daniem,這是隻是和想法,感謝您的反饋... – 2010-09-22 17:50:31

+0

理論上,你可以從LightOpenID中拷貝'get * Attributes()'函數,替換'$ this-> data' - >'$ _GET + $ _POST'。 – Mewp 2010-09-22 19:04:46

相關問題