使用自定义登录方法时出现服务器错误

ily*_*lyo 5 login meteor

我正在尝试测试自定义登录方法功能,所以这是我的客户端:

Meteor.loginWithCode = function(phone, code) {

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

这是服务器:

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
  };
});
Run Code Online (Sandbox Code Playgroud)

我为什么要来

Exception while invoking method 'login' Error: A login method must specify a userId or an error
Run Code Online (Sandbox Code Playgroud)

当我这样做Meteor.loginWithCode('123456789', '123');

Kub*_*bek 8

您应该返回userId不是id:

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

如果登录失败,则error转而通过userId.

证明:

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

第255-256行