Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extending the Meteor loginWithPassword method

Tags:

meteor

I may be totally off line here, but I'm trying to extend the loginWithPassword method in Meteor to handle only returning users with a few parameters set in their profile.

I'm creating the users fine and once created they login as that user type and all is good, but, when I try and login again I hit a wall.

I've tried implementing my own login handler as follows...

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); return { id: userId

} });

But am getting an error when I get to this code that says

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)

I'm obviously missing a this pointer or something like that, but don't know enough about this framework to know if I'm totally off track here even trying to get this to work.

Ta P.

like image 542
Peter Nunn Avatar asked Feb 19 '26 17:02

Peter Nunn


1 Answers

I am not too familiar with it but from http://docs.meteor.com, Meteor.loginWithPassword () can only be called on the client. You have written it into the server side code from the tutorial.

That is throwing the error you see. If you move it to the client you will also see that it only returns to the callback function so your variable user will remain undefined.

Meteor.user().profile is available on the client so you can just check the type there in the callback of loginWithPassword to check the information at login.

like image 117
user728291 Avatar answered Feb 26 '26 08:02

user728291