2015-11-06 122 views
0

我使用的是Spring社交Facebook框架2.0.2,我正在訪問Facebook應用程序版本2.5。春季社交Facebook 2.0.2無法獲取電子郵件

我以某種方式無法獲取通過fetchObject方法進行身份驗證的用戶的電子郵件地址。

@RequestMapping("/register/facebook") 
public String registerFacebookUser(WebRequest request, Model model) { 
    Connection<Facebook> connection = (Connection<Facebook>)providerSignInUtils.getConnectionFromSession(request); 

    User profile = connection.getApi().fetchObject("me", User.class, "id", "first_name", "last_name", "link", "email"); 

    userConnectionRepository.createConnectionRepository(profile.getId()).addConnection(connection); 

    return "register"; 
} 

身份證,名字和姓氏完美,但電子郵件地址似乎爲空。我已經向Facebook註冊了一個電子郵件地址,並對其進行了正確驗證,並且已公開發布。

我的第一個猜測是,當我查看代碼時,Spring社交Facebook使用的版本是2.3。你認爲那可能是?

+1

您是否要求用戶提供相應的權限? – CBroe

回答

0

我回答了我的問題,因爲我發現我錯過了。

您實際上需要在隱藏輸入中爲登錄表單提供權限。非常類似於您爲CSRF令牌執行的操作。

 <form id="fbk_signin" action="<c:url value="/signin/facebook"/>" method="POST">     
      <button type="submit"> 
       SignIn with facebook 
      </button> 
      <input type="hidden" 
        name="${_csrf.parameterName}" 
        value="${_csrf.token}"/> 
      <input type="hidden" name="scope" value="public_profile,email" /> 
     </form> 

在Facebook開發者網站上可以找到權限值here

感謝CBroe的回答,他讓我在春季文檔中看到了這一點。我沒有意識到這一點。

1

facebook api中的變化可能導致了這種情況。請嘗試下面的代碼:

UserOperations userOperations = facebook.userOperations(); 
      String [] fields = { "id", "email", "first_name", "last_name" }; 
      org.springframework.social.facebook.api.User profile = facebook.fetchObject 
        ("me", org.springframework.social.facebook.api.User.class, fields); 
相關問題