扩展Meteor的loginWithPassword方法

时间:2013-07-03 11:09:53

标签: meteor

我可能完全离线了,但我正在尝试扩展Meteor中的loginWithPassword方法,以便仅处理在其个人资料中设置了一些参数的返回用户。

我正在创建用户很好,一旦创建他们登录为该用户类型并且一切都很好,但是,当我尝试再次登录时,我碰到了墙。

我已尝试按如下方式实现自己的登录处理程序......

Accounts.registerLoginHandler(function(loginRequest) {
console.log("Got to Accounts.registerLoginHandler");
console.log(loginRequest);

var userId = null;

var user = Meteor.loginWithPassword(loginRequest.email, loginRequest.password, function(error){
    if(error !== undefined){       
        setAlert('error', 'Error in processing login. ' + error.reason + '.');
     }
});

var userWithType;
if(user){ // we have the right username and password
    console.log("Found a user and logged them in");
    userWithType = Meteor.users.findOne({'id': user._id, 'profile.type': loginRequest.type});
}


if(userWithType){
   console.log("Found User of that type")
   userId = user._id;
}

console.log(“UserId”,userId);     返回{       id:userId

} });

但是当我看到这个代码

时出现错误
Got to Accounts.registerLoginHandler
{ email: 'blah2@blah', password: 'blha', type: 'user' }
Exception while invoking method 'login' TypeError: Object #<Object> has no method 'loginWithPassword'
    at app/server/login.js:8:23
    at tryAllLoginHandlers (app/packages/accounts-base/accounts_server.js:53:18)
    at Meteor.methods.login (app/packages/accounts-base/accounts_server.js:73:18)
    at maybeAuditArgumentChecks (app/packages/livedata/livedata_server.js:1367:12)
    at _.extend.protocol_handlers.method.exception (app/packages/livedata/livedata_server.js:596:20)
    at _.extend.withValue (app/packages/meteor/dynamics_nodejs.js:31:17)
    at app/packages/livedata/livedata_server.js:595:44
    at _.extend.withValue (app/packages/meteor/dynamics_nodejs.js:31:17)
    at _.extend.protocol_handlers.method (app/packages/livedata/livedata_server.js:594:48)
    at _.extend.processMessage.processNext (app/packages/livedata/livedata_server.js:488:43)

我显然错过了这个指针或类似的东西,但对这个框架知之甚少,知道我是否完全偏离这里,甚至试图让它发挥作用。

钽 P上。

1 个答案:

答案 0 :(得分:4)

我不太熟悉它,但是从http://docs.meteor.com开始,Meteor.loginWithPassword ()只能在客户端上调用。您已将其写入教程的服务器端代码中。

这就是你看到的错误。如果将其移动到客户端,您还会看到它只返回回调函数,因此您的变量user将保持未定义。

客户端上提供了Meteor.user()。配置文件,因此您可以在loginWithPassword的回调中检查其中的类型,以便在登录时检查信息。