无法在Meteor应用中访问其他用户的电子邮件地址

时间:2013-02-10 21:10:20

标签: meteor

在开始之前,我已按照此处的步骤进行操作:Meteor Querying other users by email

我已阅读有关发布用户的Meteor文档以及如何添加比id,username和profile更多的字段。尽管存在所有这些问题,我的情况仍然存在。

我正在尝试访问其他用户的电子邮件地址,而不仅仅是当前登录的用户。我有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}});

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

1 个答案:

答案 0 :(得分:4)

我认为这是因为你订阅了两套相同的系列。 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>