Meteor userId始终为null

时间:2016-02-23 21:21:25

标签: meteor

此Meteor应用已删除不安全和自动发布,并添加了帐户密码 meteor:PRIMARY> db.users.find({});还显示我使用的唯一用户凭据的存在 调用Meteor.call('addTasks1',params);会引发错误,进一步检查显示Meteor.userId()null 为什么这样以及如何解决?感谢

更新 根据斯蒂芬伍兹建议的解决方案;
当我将服务器上的方法addTasks1从Meteor.userId()更改为this.userId时,它仍会抛出错误。

///////////////////////////
//     both/both.js      //
///////////////////////////
Tasks1 = new Mongo.Collection('tasks1');


///////////////////////////
//   client/client.js    //
///////////////////////////
Template.login.events({
  'click #logMe': function() {
     var credentials = [$('#id').val(), $('#pin').val()];
     Meteor.call('logMeIn', credentials);
   }
 });

Template.footer.events({
  'click button': function () {
    if ( this.text === "SUBMIT" ) {
      var inputs = document.getElementsByTagName('input');
      for (var i = 0; i < inputs.length; i++) {
        var params = {};
        params[inputs[i].name] = inputs[i].value;
        Meteor.call('addTasks1', params);
      }
    }
  }
});


///////////////////////////
//    server/server.js   //
///////////////////////////
Meteor.methods({
  logMeIn: function (credentials) {
     Accounts.createUser({username: credentials[0], password: credentials[1]});
  }
});

Meteor.publish('tasks1', function(){
  return Tasks1.find({userId: this.userId});
});

Meteor.methods({
  addTasks1: function (doc) {
    if (Meteor.userId()) {
      Tasks1.insert(doc);
    } else {
      throw new Meteor.Error("Not Authorized");
    }
  }
});

1 个答案:

答案 0 :(得分:0)

您需要将用户登录,在客户端使用Meteor.loginWithPassword(<USERNAME>, <PASSWORD>)来记录已创建的用户。

此外,您的Meteor方法addTasks1正在服务器上执行。您希望在服务器上使用this.userId而不是Meteor.userId()。