Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting server error when using custom login method

I am trying to test the custom login method functionality, so this is my client:

Meteor.loginWithCode = function(phone, code) {

  Accounts.callLoginMethod({
    methodArguments: [{
      hascode: true,
      phone: phone,
      code: code
    }],
    userCallback: function loginCallback (error, result) {
      console.log(error, result);
    }
  });
};

And this is the server:

Accounts.registerLoginHandler('login', function(loginRequest) {

  var user = Meteor.users.findOne({phone: loginRequest.phone});

  if(user.code !== loginRequest.code) {
    return null;
  }

  var stampedToken = Accounts._generateStampedLoginToken();
  var hashStampedToken = Accounts._hashStampedToken(stampedToken);

  Meteor.users.update(user._id,
    {$push: {'services.resume.loginTokens': hashStampedToken}}
  );

  return {
    id: user._id,
    token: stampedToken.token
  };
});

Why am I getting

Exception while invoking method 'login' Error: A login method must specify a userId or an error

When I do Meteor.loginWithCode('123456789', '123');?

like image 279
ilyo Avatar asked Sep 03 '14 13:09

ilyo


1 Answers

You should return userId not id :

Accounts.registerLoginHandler('login', function(loginRequest) {
  ...
  ...
  return {
    userId: user._id,
    token: stampedToken.token
  };
})

If login was unsuccessful then pass error instead userId.

Proof:

if (!result.userId && !result.error)
   throw new Error("A login method must specify a userId or an error");

Line 255-256

like image 51
Kuba Wyrobek Avatar answered Nov 04 '22 20:11

Kuba Wyrobek