javascript - 在meteor中获取facebook信息

标签 javascript facebook meteor meteor-accounts

我正在使用Meteor.loginWithFacebook

用户存储为:

{
    "_id" : "cnzMXwmvtF42Dfy4q",
    "createdAt" : ISODate("2016-08-31T15:58:00.814Z"),
    "services" : {
        "facebook" : {
            "accessToken" : "randomtoken",
            "expiresAt" : 1477842969226,
            "id" : "randomid",
            "email" : "example@example.com",
            "name" : "Name",
            "first_name" : "Firstname",
            "last_name" : "Lastname",
            "link" : "https://www.facebook.com/...",
            "gender" : "male",
            "locale" : "en_US",
            "age_range" : {
                "min" : 21
            }
        },
        "resume" : {
            "loginTokens" : [
                {
                    "when" : ISODate("2016-08-31T15:58:00.818Z"),
                    "hashedToken" : "randomtoken"
                }
            ]
        }
    },
    "profile" : {
        "name" : "Firstname"
    }
}

但是当我这样做时: console.log(Meteor.user().services);

它返回为未定义。

但是如果我这样做 console.log(Meteor.user().profile); 它会正确地显示名称

问题

如何在meteor中检索facebook信息?

最佳答案

默认情况下,仅将用户名、电子邮件和配置文件对象发布到客户端。您需要编写一个发布并在客户端订阅该发布以公开您需要的字段。

话虽这么说,直接发布 services.facebook 对象可能不适合您的目的。如果您使用多种身份验证方法(例如 Google 或用户名/密码),您可能希望通过将所需信息复制到不同字段来标准化您的用户文档。

以下是我处理使用 Facebook、Google 和常规旧电子邮件/密码的项目的方法:

Accounts.onCreateUser(function(options, user) {
    // Copy first name and last name from user services
    if (user.services.google) {
        user.firstName = user.services.google.given_name;
        user.lastName = user.services.google.family_name;
    } else if (user.services.facebook) {
        user.firstName = user.services.facebook.first_name;
        user.lastName = user.services.facebook.last_name;
    }

    // You can use the profile object to pass in user information in a password signup form
    if (options && options.profile) {
        if (options.profile.firstName) {
            user.firstName = options.profile.firstName;
        }

        if (options.profile.lastName) {
            user.lastName = options.profile.lastName;
        }
    }

    return user;
});

Note that it is NOT recommended that you use the profile object to store user data.

关于javascript - 在meteor中获取facebook信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39254437/

相关文章:

node.js - 生产环境中的 Meteor.js 上传文件夹

javascript - jQuery - 从具有特定类的元素列表中获取点击项目的索引

javascript - 添加 Facebook 分享按钮未显示

session - 如何在 meteor 中将正则表达式发送到服务器端

meteor - 启动Meteor服务器并让其他计算机访问它

ios - 有什么方法可以让我无法通过他的 Facebook 用户 ID 或用户名获取任何用户的好友列表?

JavaScript:从对象数组中删除重复项

javascript - 使用 DynamoDB 扫描重复项目

javascript - 验证数组的最后一个值是否大于前一个值

wpf - 调用线程必须是STA,因为很多UI组件都需要这个