我正在尝试测试自定义登录方法功能,所以这是我的客户端:
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');?
您应该返回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)