发布和订阅无法正常运行

时间:2016-06-06 16:18:00

标签: javascript facebook meteor publish-subscribe meteor-accounts

发布和订阅无效。请在下面找到解决方案作为答案。

初步问题: 我正在尝试发布facebook first_name,这是在使用Meteor中的帐户facebook包登录时自动检索的(存储在services.facebook下的用户集合中)。我有自动发布和不安全删除。

到目前为止,我所尝试的内容如下:

服务器端

Meteor.publish("facebook_name", function() {
return Meteor.users.find({_id: this.userId}, 
  {fields: {'services.facebook.first_name' : true} });
});

客户端

Meteor.subscribe('facebook_name');

我在模板中使用的是显示它

<div class="Name"><p>{{currentUser.services.facebook.first_name}}</p></div>

在删除自动发布之前,名称显示在模板中。

2 个答案:

答案 0 :(得分:1)

找到问题的解决方案:

在client / main.js中设置meteor项目时,如果您正在使用路由和模板而不是main.html模板,它将显示import './main.html';,这将阻止发布和订阅正常工作。< / p>

答案 1 :(得分:0)

当用户通过facebook oauth API登录并使用meteor accounts-facebook实现身份验证时,所有需要的数据都存储在当前用户对象(Meteor.user())中。

因此,您案例中的用户架构看起来与此类似:

{
  "_id": "Ap85ac4r6Xe3paeAh",
  "createdAt": "2015-12-10T22:29:46.854Z",
  "services": {
  "facebook": {
    "accessToken": "XXX",
    "expiresAt": 1454970581716,
    "id": "XXX",
    "email": "ada@lovelace.com",
    "name": "Ada Lovelace",
    "first_name": "Ada",
    "last_name": "Lovelace",
    "link": "https://www.facebook.com/app_scoped_user_id/XXX/",
    "gender": "female",
    "locale": "en_US",
    "age_range": {
      "min": 21
    }
  },
"resume": {
  "loginTokens": [
    {
      "when": "2015-12-10T22:29:46.858Z",
      "hashedToken": "XXX"
    }
  ]
 }
},
"profile": {
  "name": "Sashko Stubailo"
 }
}

因此,如果要检索用户名,您需要做的就是将当前用户发布到客户端,然后从用户对象获取用户名。

// server
Meteor.publish("userData", function () {
  return Meteor.users.find({_id: this.userId});
});

// client
Meteor.subscribe("userData");

Template.templateName.helpers({
 // this function returns username
 Username : function(){
 // if user is logged in using facebook; otherwise user is logged in using password
 if   (Meteor.user().profile.name)
   return Meteor.user().profile.name;
 else 
   return Meteor.user().username;
}

现在,您可以在视图中显示用户的名称:{{用户名}}

这是more info ...