2013-04-13 73 views
1

我需要使用內部用戶管理系統來驗證我的用戶。這個系統還擁有用戶對組和角色以及租戶的成員身份,這在授權時最有用。添加登錄提供商到流星

我查看了accounts-persona的代碼,但它不適用於我。因此我推斷我做錯了什麼。

在服務器上有一個新的LoginHandler:

Meteor.startup(function() { 
    var config = Accounts.loginServiceConfiguration.findOne({service: 'sertal'}); 
    if (!config) { 
     Accounts.loginServiceConfiguration.insert({ service: 'sertal' }); 
    } 
}); 

Accounts.registerLoginHandler(function (options) { 
    if (!options.sertal && !options.assertion) 
     return undefined; // don't handle 

    var url = "http://dev.sertal.ch/checkCredential"; 
    var request = { 
     params: { 
     uname: options.email, 
     pword: options.password 
     } 
    }; 
    var result = Meteor.http.get(url, request); 

    if (result.statusCode !== 200) { 
     throw new Meteor.Error(Accounts.LoginCancelledError.numericError, 'Sertal Login Failed'); 
    } else { 
     var user = result.data.userrec; 
     user.groups = result.data.grprec; 
     user.id = user._id; 
     return Accounts.updateOrCreateUserFromExternalService('sertal', user); 
    } 

}); 

在我使用此代碼登錄按鈕後,客戶端已被按下:

Accounts.callLoginMethod({ 
    methodName: 'login', 
    methodArguments: {sertal: true, 
     email: $('#sertal-email').val(), 
     password: $('#sertal-password').val(), 
     resume: false 
    }, 
    userCallback: function (error) { 
     if (error) { 
     console.log("error: " + error); 
     } else { 
     $("#sertalLoginFormDiv").dropdown('toggle'); 
     } 
    } 
}); 

但它不會觸發LoginHandler。必須有一些缺失,但我無法弄清楚。

我找不到關於此主題的任何文檔。答案也可能是指出解釋過程的一些文件。

+0

對不起,我無法幫助我正在學習流星,這方面的任何消息?你有沒有設法添加一項新服務? – jptsetung

+0

我沒有進一步調查。我最終創建了一個帶有生成密碼的遠程用戶的本地Meteor用戶(用戶對象的ID)。這仍然是我要做的事情。也許它在流星書中 –

回答

0

基於我的測試,methodArguments必須是一個對象數組。

而且,從我在日誌中看到,如果methodArguments對象包括在對象的根密碼,然後流星拋出一個錯誤「無法登錄{類型:‘密碼’,......」

我能夠通過將所有處理程序的參數作爲對象的一部分來完成這項工作。 這樣的事情,在客戶端上:

loginRequest = {myLogin:{email: email, password: password}}; 
Accounts.callLoginMethod({ 
    methodArguments: [loginRequest], 
    userCallback: callback 
}); 

當客戶機上執行,流星叫我的服務器代碼:

Accounts.registerLoginHandler(function("someName", loginRequest{ 
    if(loginRequest.myLogin){ 
     // I get the loginRequestObject, and can attempt to sign in... 
    } 
}); 

注意,我使用流星1.0。