我正在尝试为应用创建以下身份验证: 用户输入电话号码并接收带有服务器中生成的代码的SMS(SMS通过外部服务处理)。如果用户输入正确的代码,则他已登录。 这意味着我必须有两个登录阶段:用手机注册用户并使用代码登录,所以这就是我认为客户端应该是这样的:
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
});
};
但我对服务器端感到困惑 - 应该有两种方法: 第一个应该只注册一个用户(并与SMS服务通信),第二个应该登录他。
这是现在的服务器测试代码:
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
?答案 0 :(得分:0)
Meteor.createUser在How can I create users server side in Meteor?
中有描述然后,Accounts.onCreateUser将包含业务逻辑http://docs.meteor.com/#accounts_oncreateuser
500的更准确的消息将在服务器端stdout上。可能是安全。
答案 1 :(得分:0)
您的登录处理程序必须按如下方式返回对象:
{ userId: user._id }
对不起,我没有详细说明整个问题,我不同意你的完整方法,但看起来你正走在正确的道路上,以获得你需要的功能。
另外,这个问题已经有一年了,现在有一些大气包可以解决这种认证问题=)