2016-03-16 32 views
3

Facebook's official documentation,訪問電子郵件,給出使用Facebook登錄時,任何應用程序提供的用戶接受並授予許可。用戶的電子郵件始終是NULL - 春實社會登錄

我仔細檢查過我們的應用程序定義,我可以看到電子郵件應該可以訪問。

enter image description here

我使用登錄使用Facebook的一個供應商,以及在Google+和Twitter的最新的可用從春天社會

<spring-social-security>1.1.4.RELEASE</spring-social-security> 
<spring-social-core>1.1.4.RELEASE</spring-social-core> 
<spring-social-facebook>2.0.3.RELEASE</spring-social-facebook> 

用戶成功。

不幸的是,所有情況下的電子郵件是NULL除了我自己的用戶。

有兩種情況,其中電子郵件可能是零,雖然

  • 如果有人用一個電話號碼,而不是電子郵件地址註冊了臉譜,電子郵件字段可能爲空
  • 此字段不會返回如果沒有有效的電子郵件地址,請

我三重檢查,通過訪問一個朋友的帳戶的這

  1. 它有一個有效的電子郵件驗證
  2. 它有一個與之相關的電話號碼
  3. 我們是朋友互相
  4. 他的電話和電子郵件是他的朋友可見

我去GraphApi explorer,但沒有電子郵件返回。

有什麼建議嗎?謝謝。

+0

您可以發佈您的代碼? –

+0

@ m.aibin'公共字符串執行(最終org.springframework.social.connect。連接連接){ //將新用戶添加到數據庫及其默認角色,以便以後在SocialAuthenticationSuccessHandler中使用 final org.springframework.social.connect.UserProfile userProfile = connection.fetchUserProfile(); final String uemail = userProfile.getUsername(); final String uname = userProfile.getEmail();' – felipe

回答

5

我發現問題出在哪裏了。我沒有將所需的範圍添加到社交連接工廠。

FacebookConnectionFactory fcf = new FacebookConnectionFactory(
      env.getProperty("oauth.facebook.api.key"), 
      env.getProperty("oauth.facebook.api.secret")); 
    //this is the important bit 
    fcf.setScope("public_profile,email"); 

    ..... 

電子郵件失蹤。

1

也許問題是,你試圖獲取用戶名。目前,Facebook擺脫了用戶名,因爲用戶名是通過Facebook發送電子郵件的一種方式。

你可以嘗試刪除這一行:

final String uemail = userProfile.getUsername(); 

,並檢查是否可以收到電子郵件。 這裏是我的代碼,我用它來獲取電子郵件等:

OAuth2Operations oauthOperations = fbProvider.getOAuthOperations(); 
AccessGrant accessGrant = oauthOperations.exchangeForAccess(authorizationCode, facebookCallback, null); 
String accessToken = accessGrant.getAccessToken(); 

Connection<Facebook> connection = fbConnectionFactory.createConnection(accessGrant); 

UserProfile profile = connection.fetchUserProfile(); 
ConnectionKey connectionKey = connection.getKey(); 
String usn = connectionKey.getProviderUserId(); 
String email = profile.getEmail(); 
+0

感謝您指出我將用戶名分配給電子郵件變量並將電子郵件分配給用戶名變量的事實。正確倒立!話雖如此,我仍然沒有看到你的代碼和我的代碼有什麼不同。最終你會從UserProfile中得到這個電子郵件,這個電子郵件實例化的方式和我做'UserProfile profile = connection.fetchUserProfile();'相同;'我現在正在測試它...... – felipe

+0

沒有運氣。電子郵件始終爲空。奇怪的是,我無法從GraphAPI瀏覽器中檢索任何朋友的電子郵件,即使我的朋友擁有一個經過驗證的帳戶,並且他已經隱私設置該電子郵件對朋友可見。這意味着我應該可以訪問它,但是我無法從GraphAPI瀏覽器訪問它。我可以從用戶界面看到它,但沒有其他方法。你有沒有檢查你的代碼有效地檢索到比你自己的其他用戶的電子郵件? – felipe

相關問題