4

我是一个新手 JS 开发人员,我正在尝试开发一个 Meteor 应用程序。我实际上是在尝试使用 Meteor 的 Account 包。我已经遵循了这个非常清楚的教程: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;
  }
});

当在数据库上更改对象用户时,我实际上正在更改模板(使用 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
  });
});
4

2 回答 2

2

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

于 2015-01-06T08:19:42.790 回答
0

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

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

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

并且会弹出用户不存在的错误

于 2014-11-19T16:07:42.727 回答