Ответ 1
Электронный адрес пользователя Facebook хранится в [userDocument].services.facebook.email
, который не публикуется клиенту, но может быть доступен с сервера или с клиента с помощью Meteor.methods
и Meteor.call
.
Я создал приложение Meteor, которое позволяет пользователям подписываться на Facebook. Для этого я использую пакеты учетных записей ui и accounts-facebook. Это прекрасно работает.
Как получить адрес электронной почты пользователя после его подписания? Я понимаю, что для этого требуется специальное разрешение, поэтому я добавил email
в качестве "Разрешение пользователя и друга" в настройках приложения на сайте разработчиков Facebook. Следуя документации Meteor, я также установил Account.ui.config
следующим образом:
Accounts.ui.config({
requestPermissions: {
facebook: ['email'],
},
passwordSignupFields: 'USERNAME_AND_EMAIL'
});
Как и ожидалось, когда пользователь моего приложения подписывается на использование Facebook, он правильно просит их поделиться своим адресом электронной почты. Но как его получить? Пользовательский документ имеет только _id
и profile.name
.
Электронный адрес пользователя Facebook хранится в [userDocument].services.facebook.email
, который не публикуется клиенту, но может быть доступен с сервера или с клиента с помощью Meteor.methods
и Meteor.call
.
это добавит информацию профиля Facebook в пользовательский объект на стороне клиента.
Accounts.onCreateUser (options, user) ->
if options.profile
user.profile = options.profile
# get profile data from Facebook
result = Meteor.http.get "https://graph.facebook.com/me", {
params: access_token: user.services.facebook.accessToken}
if !result.error && result.data
#if successfully obtained facebook profile, save it off
#the user can access the profile object on the client
user.profile.facebook = result.data;
return user
на стороне сервера можно получить доступ к facebook.accesstoken... так что используйте его, чтобы получить полную информацию FB и сохранить ее в пользовательском объекте клиента.
ping the Meteor.user() в консоли, чтобы получить информацию FB.
Не думайте, что это самая лучшая практика с точки зрения наличия информации FB на клиенте.