2014-09-03 15 views
5

Tôi cố gắng để kiểm tra chức năng phương pháp tùy chỉnh đăng nhập, vì vậy đây là khách hàng của tôi:Bắt lỗi máy chủ khi sử dụng phương pháp tùy chỉnh đăng nhập

Meteor.loginWithCode = function(phone, code) { 

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

Và đây là 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 
    }; 
}); 

Tại sao Tôi nhận được

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

Khi tôi làm Meteor.loginWithCode('123456789', '123');?

Trả lời

8

Bạn nên trả lại userId không id:

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

Nếu đăng nhập không thành công sau đó vượt qua error thay userId.

Proof:

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

Line 255-256

Các vấn đề liên quan