我正尝试为应用程序创建以下身份验证: 用户输入电话号码并接收带有服务器中生成的代码的SMS(SMS通过外部服务处理)。如果用户输入了正确的密码,他就登录了。 这意味着我必须有两个登录阶段:向用户注册电话并将他登录到代码中,所以这就是我认为客户应该看起来像的样子:如何在Meteor中创建自定义用户认证?
Meteor.getSmsCode = function(phone, username, callback) {
Accounts.callLoginMethod({
methodName: 'getsmscode',
methodArguments: [{
getsmscode: true,
phone: phone,
username: username
}],
userCallback: callback
});
};
Meteor.loginWithCode = function(phone, code, callback) {
Accounts.callLoginMethod({
methodName: 'login',
methodArguments: [{
hascode: true,
phone: phone,
code: code
}],
userCallback: callback
});
};
但我困惑的服务器端 - 应该有两种方法: 首先应该只注册一个用户(与短信服务进行通信)和第二应登录他
这是服务器。现在的测试代码:
Meteor.users.insert({phone: '123456789', code: '123', username:'ilyo'});
Accounts.registerLoginHandler(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(userId,
{$push: {'services.resume.loginTokens': hashStampedToken}}
);
return {
id: user._id,
token: stampedToken.token
};
});
这是会发生什么,当我尝试:
- 为什么一个我得到
500
? - 为什么用户没有
code
和phone
字段? - 我应该使用什么方法来处理
getSmsCode
?