2010-05-29 125 views
2

我使用org.jboss.seam.security.openid.OpenId類來登錄用戶到我的seam webapp。目前我正在將validatedId(openid.getValidatedId())保存到數據庫中,並要求用戶在登錄後提供他們自己的電子郵件地址以及姓氏和名字。我使用Google,Yahoo,AOL和MyOpenID openId提供商。使用Jboss/Seam從OpenId獲取電子郵件地址

有沒有辦法檢索用戶的電子郵件地址和/或姓氏/名字,而不需要他們手動輸入?

回答

4

我快速瀏覽了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

我試圖獲取用戶的電子郵件地址和個人的名字從你提到的四個供應商簽訂項。這是我的小實驗的結果。

從谷歌我得到:

  • Gmail電子郵件地址

從AOL:

  • 電子郵件(默認爲AOL電子郵件,但用戶可以鍵入另一個)

從雅虎:

  • 雅虎的電子郵件地址
  • 全名(全部在一個字符串)

從myOpenID來說:

  • 電子郵件(如果用戶已經提交一個在他的檔案中)
  • 姓名(如果用戶已經在他的個人資料申請一個)

我必須包括在獲得來自所有供應商的響應請求的http://schema.openid.net/contact/emailhttp://axschema.org namspaces。

+0

我檢查了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

+0

我建議檢查http請求,以確保少量的位是可行的起點。我設法拼湊了一些工作代碼。我希望能夠進一步幫助你。我已經相應地更新了我的帖子。 – 2010-06-01 17:27:38

相關問題