Meteor.user()始终为null

时间:2014-11-19 15:17:03

标签: javascript meteor meteor-accounts

我是一名新手JS开发人员,我正在尝试开发一个Meteor应用程序。 我实际上是在尝试使用Meteor的Account包。我跟着这个非常清楚的tuto:http://blog.benmcmahen.com/post/41741539120/building-a-customized-accounts-ui-for-meteor

这是我的登录页面(在Jade中):

template(name='login')
  div.container
    +menuLogin

    +form_signin


template(name="form_signin")
  form.form-signin(role="form" method="post" action="" id="form-signin" data-toggle="validator")
    h2.form-signin-heading Connexion
    input.form-control(type="text" placeholder="Nom d'utilisateur" name="userName" autofocus="" required )
    input.form-control(type="password" placeholder="Mot de passe" name="password" required )

    +profil_choice

    button.btn.btn-primary.btn-lg.btn-block.btn-connection(type="submit") Connexion
    div.alert.alert-danger.alert-dississible(id="alert-login" role="alert") 
        button.close(type="button" data-dismiss="alert")
            span(aria-hidden="true") ×
            span.sr-only Close
        p(id="alert-login-text")

和JavaScript:

Profils = new Mongo.Collection('profils');
Meteor.subscribe('profils');
Meteor.subscribe('users');

var userCursor = Meteor.users.find();
var handle = userCursor.observe({
  changed: function (tmp){
    console.log(tmp);
    Router.go('start');
  }
})

var trimInput = function(val){
  return val.replace(/^\s*|\s*$/g, "");
}

Meteor.autorun(function (){
  var message = Session.get('errorMessage');
  if (message){
    $('#alert-login-text').text(message);
    $('#alert-login').show(200).delay(3000).hide(200);
    Session.set('errorMessage', null);
  }
});

var checkLoginParams = function(userName, password, profil){
  if (profil == ""){
    Session.set('errorMessage', "Veuillez selectionner un profil !");
    return false;
  }
  return true;
}

Template.form_signin.events({
  'submit form': function (event, template){
    event.preventDefault();

    var userName = template.find("input[name=userName]").value;
    var password = template.find("input[name=password]").value;
    var profil = template.find("input[name=profilName]").value;

    var username = trimInput(userName);
    console.log("user : " + username + "  password : " + password);

    if (checkLoginParams(username, password, profil) == false){
      return;
    }

    Meteor.loginWithPassword(username, password, function (error){           
      if (error){
        Session.set('errorMessage', "Nom d'utilisateur ou mot de passe incorrect");
        console.log(error.reason);
      }
    });
    return false;
  }
});

当我在数据库上更改Object用户时,我实际上正在更改模板(使用Iron路由器),因为我无法找到任何其他内容来注意我,无论我是否登录。

Router.route('login', function (){
  this.render('login');
});

Router.route('start',{
  path: 'start',
  onBeforeAction: function () {
    if (Meteor.user()){
      this.render('start');
    }
    else{
      if (Meteor.loggingIn()){
        this.render('start');
      }
      else{
        Router.go('login');
      }
    }
  }
});

问题是,无论我在哪里调用Meteor.user(),它总是为空。所以......我显然没有联系。

数据库中只有一个用户,我确信连接参数很好。

而且,为什么我不能在loginWithPassword()回调中做一个Router.go('start')?

编辑:这是我在服务器端创建的用户

if (Meteor.isServer) {
  Meteor.startup(function() 
  {
    Accounts.createUser({
        username : "admin",
        password : "123",
        email : "test@test.fr",
        isAdmin : true
  });
});

2 个答案:

答案 0 :(得分:2)

通过更新我的Meteor版本解决了这个问题。实际上......我真的不明白出了什么问题。

答案 1 :(得分:0)

您不创建用户,因此无法登录不存在的帐户 http://docs.meteor.com/#/full/accounts_createuser

您可以为登录创建回调,例如:

if (error)
        {
            console.log(error.reason);
        }

和erorr用户不存在会弹出