Meteor - 无法识别验证登录后创建的新用户

时间:2015-01-10 16:23:07

标签: meteor

我有一个登录验证功能设置来检查新用户是否在应用程序外注册。用户信息存储在临时集合中。如果用户信息验证我希望能够在客户端使用Accounts.createUser,但我无法弄清楚如何做到这一点。文档说“使用单个参数调用注册的验证登录回调,尝试信息对象”,但我找不到任何如何执行此操作的示例。

environment.js

Accounts.config({
 forbidClientAccountCreation : true
});

server.js

    Accounts.validateLoginAttempt(function(info){
    if (!info.allowed)
    {
        var userEmail = info.methodArguments[0].user['email'].toLowerCase();
        var userPass = info.methodArguments[0].password['digest'];

        // check if this is a temp user
        if (tmpUsers.find({'email': userEmail}).count() == 1)
        {
            var user = tmpUsers.findOne({'email': userEmail})
            // check for active
            if (user.active == "Yes")
            {
                // check password
                if (userPass == user.password)
                {
                    var accountId = Accounts.createUser({
                        'password': userPass,
                        'email': userEmail,
                        'profile': ({'acctType': user.type})
                    });
                    return true;
                } else {
                    throw new Meteor.Error(403, "Incorrect password.");
                    return false;
                }
            } else {
                throw new Meteor.Error(403, "Your account has yet to be activated.);
                return false;
            }
        } else {
            throw new Meteor.Error(403, "Can not find user " + userEmail);
            return false;
        }
    } else {
        return true;
    }
}); 

更新

我最终将Account.userCreate部分放在服务器端,现在它确实创建了用户,但是当我尝试登录时,我得到“电子邮件已存在”。因此,似乎它不希望登录成功并尝试再次创建用户。

{ // This user works
 "_id" : "hCBLo3AJJwmtR6s62",
 "createdAt" : ISODate("2014-12-26T20:27:58.44Z"),
 "services" : {
   "password" : {
    "bcrypt" : "$2a$10$pxlEy.JFomgwQwV2cpm72.TBG4.llP98BF9ssTCptC4WsekLzJO9G"
   },
 "resume" : {
  "loginTokens" : []
 }
},
"emails" : [{
  "address" : "demo@demo.com",
  "verified" : false
}]
} 

{ // This one does not
 "_id" : "w6SGuqJJPs5LoCTTj",
 "createdAt" : ISODate("2015-01-10T20:54:16.032Z"),
 "services" : {
  "password" : {
   "bcrypt" : "$2a$10$VJFj0UOrQiLs7djfGWAeMeruDactDFrl1nlEsXh/r5Z/895C5ubAW"
  }
 },
  "emails" : [{
    "address" : "demo2@demo.com",
    "verified" : false
  }],
 "profile" : {
   "acctType" : null
 }
}

1 个答案:

答案 0 :(得分:1)

这样的事情对你有用吗?



var options = {
  username: "username",    // you'll need to fill this in
  email:    userEmail,
  password: userPass,
  profile:  {name: "name"} // you'll need to fill this in
};

Accounts.createUser(options, function (error) {
  if (error) {
    console.log("Cannot create user");
  }
});