2016-03-16 2 views
3

Согласно Facebook's official documentation, доступ к электронной почте предоставляется любому приложению, которое предоставляет пользователь и предоставляет разрешение при регистрации через Facebook.Адрес электронной почты пользователя всегда NULL - Spring Social Facebook Login

Я дважды проверил наше определение приложения, и я вижу, что электронное письмо должно быть доступно.

enter image description here

Я использую последнюю доступный от Spring социального

<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> 

Пользователей успешно Войти с использованием Facebook в качестве поставщика, а также в Google+ и Twitter.

К сожалению, для все случаи электронной почты NULL, за исключением моего собственного пользователя.

Есть два сценария, где электронная почта может быть нулевым, хотя

  • если кто-то подписался на Facebook с номером телефона, а не адрес электронной почты, поле электронной почты может быть пустым
  • Это поле не будет возвращается, если адрес электронной почты не доступен

Я тройной проверил, что, обращаясь к друзьям шахтных счетов, который

  1. Он получил действительный адрес электронной почты проверен
  2. Он получил телефонный номер, связанный с ним
  3. Мы дружим друг с другим
  4. Его телефон и адрес электронной почты открыты для своих друзей

я иду GraphApi explorer, но никакое электронное письмо не возвращается.

Любые советы? Спасибо.

+0

Можете ли вы разместить свой код? –

+0

@ m.aibin 'public String execute (окончательный org.springframework.social.connect.Connection ) { // добавление новых пользователей в db с его ролями по умолчанию для последующего использования в 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

Спасибо, что указали на то, что я назначил имя пользователя переменной электронной почты и email для переменной имени пользователя. Точно перевернутый! Сказав это, я все еще не понимаю, что отличает ваш код от моего. В конечном итоге вы получаете электронное письмо от UserProfile, которое создается таким же образом, как и я, выполняя 'UserProfile profile = connection.fetchUserProfile();' Я тестирую его сейчас так или иначе ... – felipe

+0

Не повезло. Email всегда равен null. Как ни странно, я не мог получить ни одного из моих друзей по электронной почте из браузера GraphAPI, даже если у моего друга есть подтвержденная учетная запись, и он настроен в конфиденциальности, что письмо видно друзьям. Это означает, что я должен получить доступ к нему, но я не мог использовать браузер GraphAPI. Я вижу это из UI, но никак не иначе. Вы проверили, что ваш код эффективно извлекает электронные письма для других пользователей, чем ваши собственные? – felipe

Смежные вопросы