2015-01-26 48 views
5

在方法中調用時,似乎「Meteor.loginWithPassword」函數不起作用。MeteorJs「loginWIthPassword」在方法中似乎不起作用

我想用autoforms創建我的登錄表單,所以我創建了一個回調方法,在用戶提交登錄表單後調用。表單被稱爲正確的方式,但loginWithPassword函數似乎不起作用。

這是我的方法(在客戶端&服務器端)

Meteor.methods({ 
    autoform_test_login : function (doc) { 
     console.log('Called login method'); 
     if (Meteor.isClient) { 
      Meteor.loginWithPassword('test', 'test', function(e) { 
       if (e) { 
        console.log(e); 
       } 
      }); 
     } 
    } 
}); 

我autoforms在提交時調用此方法:

{{#autoForm schema="Schema_Login" id="form_login" type="method" meteormethod="autoform_test_login"}} 
.... 

在提交此表我得到這個錯誤:

Error: No result from call to login {stack: (...), message: "No result from call to login"} 

當我現在打開我的瀏覽器控制檯並輸入:

Meteor.call('autoform_test_login'); 

我會得到同樣的錯誤。

但是:當我輸入我的控制檯下它的工作原理(現在的錯誤是:未找到用戶名):

Meteor.loginWithPassword('test', 'test', function(e) { 
       if (e) { 
        console.log(e); 
       } 
      }); 

我的方法做絕對沒有別的那麼這剪斷,所以我問自己,怎麼回事這裏錯了。

Ps .: 我知道我添加了「測試」作爲用戶名和「測試」作爲密碼 - 它只是爲了測試。即使輸入正確,錯誤總是一樣的。

+0

你有沒有能夠解決這個問題?我有同樣的問題,不能讓它工作。 – 2015-08-08 13:40:45

+1

我在github上爲此打開了一個新問題:https:// github。/流星/流星/問題/ 4912 複製存儲庫:https://github.com/flipace/meteor-accounts-password-bug 似乎只有當試圖在Meteor.methods中使用此功能時纔會發生功能。 – 2015-08-08 15:58:37

回答

0

確保autoform實際上傳遞了正確的值。如果您在架構設置中犯了錯誤,它會自動清除值(設置爲undefined)而不會引發錯誤。

我也不完全確定,如果在這種情況下使用它與方法設置將工作,因爲你想要在客戶端而不是服務器(我認爲)上進行登錄調用。

7

好的,所以我得到了答覆,現在我知道爲什麼這不按預期工作。

  1. loginWithPassord只能在客戶端執行。
  2. 當您在客戶端上使用Meteor.methods時,它仍然會運行您在服務器上定義的功能。這就是爲什麼它不能在Meteor.methods函數中調用loginWithPassword。
  3. 只需在客戶端的任何其他位置使用此功能即可。例如 - 直接在某個模板事件中。

像我一樣永遠找到它爲什麼不工作。

+0

在客戶端使用此功能有多少安全? – 2015-10-23 11:54:53

+0

該功能將啓動登錄流程,在服務器上處理真正的「登錄」。如果登錄成功,客戶端將收到一個令牌。所以使用這個函數應該沒問題。 – 2015-10-23 12:58:30

0

確保您當前的Meteor實例與變量MONGO_URL指向的mongo數據庫有活動連接。 Meteor.loginWithPassword在連接關閉或斷開時無法提供錯誤反饋。