扩展Meteor loginWithPassword方法

扩展Meteor loginWithPassword方法,meteor,Meteor,我在这里可能完全离线,但我正在尝试扩展Meteor中的loginWithPassword方法,以便只处理在个人资料中设置了一些参数的返回用户 我创建的用户很好,一旦创建,他们就以该用户类型登录,一切都很好,但是,当我再次尝试登录时,我碰到了一堵墙 我已经尝试实现我自己的登录处理程序,如下所示 Accounts.registerLoginHandler(function(loginRequest) { console.log("Got to Accounts.registerLoginHandle

我在这里可能完全离线,但我正在尝试扩展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;
}
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)
进入Accounts.registerLoginHandler
{电子邮件:'blah2@blah,密码:'blha',键入:'user'}
调用方法“login”TypeError时出现异常:对象没有方法“loginWithPassword”
在app/server/login.js:8:23
在TryAlloginHandlers(app/packages/accounts base/accounts_server.js:53:18)
在Meteor.methods.login(app/packages/accounts base/accounts_server.js:73:18)
在MaybauditArgumentChecks(app/packages/livedata/livedata_server.js:1367:12)
在u.extend.protocol_handlers.method.exception(app/packages/livedata/livedata_server.js:596:20)
在u.extend.withValue(app/packages/meteor/dynamics_nodejs.js:31:17)
在app/packages/livedata/livedata_server.js:595:44
在u.extend.withValue(app/packages/meteor/dynamics_nodejs.js:31:17)
在u.extend.protocol_handlers.method(app/packages/livedata/livedata_server.js:594:48)
在u.extend.processMessage.processNext(app/packages/livedata/livedata_server.js:488:43)
很明显,我缺少了一个this指针或类似的东西,但是我对这个框架的了解还不够,以至于不知道我在这里是否完全偏离了轨道,甚至试图让它工作

助教
P.

我对它不太熟悉,但是从,

Meteor.loginWithPassword()
只能在客户端调用。您已经将其写入教程中的服务器端代码中

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


Meteor.user().profile在客户端可用,因此您可以在
loginWithPassword
的回调中检查那里的类型,以检查登录时的信息。

您是否尝试过此指南:谢谢Daniel,这是我尝试使其工作的基础指南。今天晚些时候,我们将研究其他选择(目前正在阅读这本书)。