我使用org.jboss.seam.security.openid.OpenId類來登錄用戶到我的seam webapp。目前我正在將validatedId(openid.getValidatedId())保存到數據庫中,並要求用戶在登錄後提供他們自己的電子郵件地址以及姓氏和名字。我使用Google,Yahoo,AOL和MyOpenID openId提供商。使用Jboss/Seam從OpenId獲取電子郵件地址
有沒有辦法檢索用戶的電子郵件地址和/或姓氏/名字,而不需要他們手動輸入?
我使用org.jboss.seam.security.openid.OpenId類來登錄用戶到我的seam webapp。目前我正在將validatedId(openid.getValidatedId())保存到數據庫中,並要求用戶在登錄後提供他們自己的電子郵件地址以及姓氏和名字。我使用Google,Yahoo,AOL和MyOpenID openId提供商。使用Jboss/Seam從OpenId獲取電子郵件地址
有沒有辦法檢索用戶的電子郵件地址和/或姓氏/名字,而不需要他們手動輸入?
我快速瀏覽了OpenId class in Seam 2.2.0.GA,它已經包含一些用於檢索用戶電子郵件地址的暫定代碼。
的代碼已經要求一個電子郵件地址,當用戶登錄。
protected String authRequest(String userSuppliedString, String returnToUrl)
throws IOException
{
...
// Attribute Exchange example: fetching the 'email' attribute
FetchRequest fetch = FetchRequest.createFetchRequest();
fetch.addAttribute("email",
"http://schema.openid.net/contact/email", // type URI
true); // required
並有註釋代碼從響應提取的電子郵件。
public String verifyResponse(HttpServletRequest httpReq)
{
...
// AuthSuccess authSuccess =
// (AuthSuccess) verification.getAuthResponse();
// if (authSuccess.hasExtension(AxMessage.OPENID_NS_AX)) {
// FetchResponse fetchResp = (FetchResponse) authSuccess
// .getExtension(AxMessage.OPENID_NS_AX);
//
// List emails = fetchResp.getAttributeValues("email");
// String email = (String) emails.get(0);
// }
在任何情況下,您都可以使用該代碼作爲起點。
編輯:
我設法寫small demo based on the Seam OpenID sample。我遺憾的是不得不復制/粘貼Seam OpenId component中的代碼,因爲屬性交換代碼的現有位不完整,並且沒有明顯的方式來擴展它。
我不知道在您的項目中是否可以複製/粘貼LGPL代碼。無論如何,Seam的OpenID組件只是圍繞openid4java庫的一個簡單的包裝器,並且可以輕鬆地重寫。
谷歌,雅虎,AOL,和者myOpenID
我試圖獲取用戶的電子郵件地址和個人的名字從你提到的四個供應商簽訂項。這是我的小實驗的結果。
從谷歌我得到:
從AOL:
從雅虎:
從myOpenID來說:
我必須包括在獲得來自所有供應商的響應請求的http://schema.openid.net/contact/email和http://axschema.org namspaces。
我檢查了HTTPFox的流量,我看到「openid.ext1.value.email」是谷歌給你的一個參數,但其他openid提供者(aol,myopenid,yahoo)沒有。 無論如何,我想以某種方式從SEAM得到這個。我試過這個: HttpServletRequest httpRequest = ServletContexts.instance()。getRequest(); String email = httpRequest.getParameter(「openid.ext1.value.email」); 在我的行動類,但沒有什麼。 – Andy 2010-05-30 08:12:39
我建議檢查http請求,以確保少量的位是可行的起點。我設法拼湊了一些工作代碼。我希望能夠進一步幫助你。我已經相應地更新了我的帖子。 – 2010-06-01 17:27:38