【问题标题】:Cannot access other users' email addresses in Meteor app无法在 Meteor 应用程序中访问其他用户的电子邮件地址
【发布时间】:2013-02-11 05:24:22
【问题描述】:

在开始之前,我已经按照以下步骤操作:Meteor Querying other users by email

我已经阅读了 Meteor 文档,其中介绍了发布用户以及如何添加比 id、用户名和配置文件更多的字段。尽管有所有这些事情,我的情况仍然存在。

我正在尝试访问其他用户的电子邮件地址,而不仅仅是当前登录的用户。我有 2 个需要此访问权限的模板。第一个模板有效并且能够访问它。第二个模板不能。

这是我用于发布电子邮件字段和订阅的设置代码(我也尝试过不指定“地址”[例如字段:{电子邮件:1}],但结果相同)

if (Meteor.isServer) {
    Meteor.publish("allUsers", function () {
        return Meteor.users.find({});
    });
    Meteor.publish("allUserData", function () {
        return Meteor.users.find({}, {fields: {"emails.address": 1}});
    });
};

if (Meteor.isClient) {
    Meteor.subscribe("allUsers");
    Meteor.subscribe("allUserData");
};

以下是模板中的有效代码:

Template.createPartner.events({
    'click .setup-partner' : function(event, template) {
        var partner = Meteor.users.findOne({"emails.address": 'example@mail.com' }); <-- works
    }
});

下面是模板中不起作用的代码:

Template.infoSelect.partnerEmail = function() {
    var partnerId = Meteor.user().profile.partnerId; <-- works
    var partner = Meteor.users.findOne({_id: partnerId}); <-- works but only _id and profile are returned
    return partner.emails[0].address; <-- throws exception because the 'emails' field doesn't exist
};

我也试过这个,但没有区别:

var partner = Meteor.users.find({_id: partnerId}, {fields: {"emails.address": 1}});

为什么我在第二个模板中看不到用户的电子邮件地址,但我在第一个模板中可以看到?

【问题讨论】:

    标签: meteor


    【解决方案1】:

    我认为这是因为您订阅了同一集合的两组。 Meteor 使用第一个订阅并忽略第二个。不过,我不确定为什么它有时会起作用。

    如果您删除第一个订阅并使用第二个它应该可以工作,基本上删除该行:

    Meteor.subscribe("allUsers");
    

    还有一个提示。您可以将电子邮件功能更改为:

    Template.infoSelect.partner = function() {
        var partnerId = Meteor.user().profile.partnerId; <-- works
        var partner = Meteor.users.findOne({_id: partnerId}); <-- works but only _id and profile are returned
        return partner;
    };
    

    您的车把将是:(它只是为您的合作伙伴变量打开了更多选项,因此您也可以通过名称引用他/她)

    <template name="infoSelect">
    {{partner.email.0.address}}
    {{partner.profile.name}} <!--If you have configured profiles -->
    </template>
    

    【讨论】:

    • 哦,是的,这是一个很好的提示,谢谢!但是,我已经尝试过您的第一个建议,即只订阅/发布一次,但没有任何区别......
    • 哇!你的第二个建议使它起作用了!我已经尝试过第一个,但是当我修改为使用第二个时,它起作用了!我的朋友,你太棒了!
    • 我对创建一个名为“allUsers”的订阅感到困惑。如果订阅名为“allUsers”,那不是创建了一个名为“allUsers”的 Meteor 集合吗?如果是这样,“allUsers”集合如何链接到 Meteor.users 集合?似乎,一旦创建了“allUsers”订阅,我就必须对新的“allUsers”集合而不是 Meteor.users 集合进行我的 mongo 查询,但这不是正在发生的事情,所以有点令人困惑.. .
    • 请记住订阅名称和集合名称是两个不同的东西。如果您订阅了某些内容,则该订阅的发布功能将发送该集合的副本。所以..meteor.users 和 allUsers (通过您上面的订阅)将包含相同的数据。如需更好的视频解释,请查看:eventedmind.com/posts/meteor-subscriptions-and-ddp。 DDP 可能没有太大的兴趣,但他的结构解释得很好。
    • 访问数组现在看起来像 {{partner.emails.[0].address}},至少在 Meteor 1.0 中(对于任何像我一样通过谷歌搜索偶然发现的人)
    猜你喜欢
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2018-05-01
    • 2013-12-29
    相关资源
    最近更新 更多