11

我创建了一个允许用户使用 Facebook 登录的 Meteor 应用程序。为此,我使用了 accounts-ui 和 accounts-facebook 包。这工作正常。

用户登录后如何检索用户的电子邮件地址?我知道这需要特殊许可,因此我email在 Facebook 开发者网站的应用程序设置中添加了“用户和朋友的许可”。按照 Meteor 文档,我也这样设置Account.ui.config

Accounts.ui.config({
  requestPermissions: {
    facebook: ['email'],
  },
  passwordSignupFields: 'USERNAME_AND_EMAIL'
});

正如预期的那样,当我的应用程序的用户使用 Facebook 登录时,它会正确地要求他们分享他们的电子邮件地址。但是我该如何找回呢?用户文档只有_idprofile.name

4

2 回答 2

9

Facebook 用户的电子邮件地址存储在 中[userDocument].services.facebook.email,不会发布到客户端,但可以从服务器或客户端使用Meteor.methodsand访问Meteor.call

于 2012-12-20T04:30:00.030 回答
0

这会将 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 Meteor.user() 以获取 FB 信息。

不要认为这正是在客户端上拥有 FB 信息的最佳实践。

于 2012-12-22T09:19:26.093 回答