2016-04-26 73 views
0

我有一個網頁,用戶可以輕鬆地切換和登錄爲另一個用戶。所以我有這個表單可以輸入用戶名/密碼,用戶會自動登錄到新用戶。這裏我怎麼做:Meteor.loginWithPassword舊用戶不會離線後(流星雨用戶狀態包)

 'submit #loginForm': function(event) { 
      event.preventDefault(); 
      var username = $("#usernameInput").val(); 
      var password = $("#passwordInput").val(); 
      var loginCallback = function (error) { 
       if (error) { 
        FlashMessages.sendError(error.message); 
       } else { 
        FlashMessages.sendSuccess("Logged in as " + username + " successfully"); 
        Meteor.logoutOtherClients(function(error) { 
         if (error) { 
          FlashMessages.sendError(error.message); 
         } 
        }); 
       } 
      }; 
      Meteor.loginWithPassword(username, password, loginCallback); 
     } 

問題是,舊用戶仍然保持在線!解決這個問題的最好方法是什麼?或者我錯過了什麼?現在我正在手動設置用戶離線Meteor.loginWithPassword之前調用,並將其設置回聯機,如果回調返回錯誤,這似乎不是很優雅的解決方案。

+0

你試着把這行代碼'Meteor.loginWithPassword(用戶名,密碼,loginCallback);'回調函數:'Meteor.logoutOtherClients(function(error){... Meteor.loginWithPassword(username,password,loginCallback);})'?也許你必須等到當前用戶註銷。 – JeanMel

+0

好吧,我的標題是誤導。我修改了它。 – nesvarbu

回答

0

好吧那我做什麼,不是很滿意,但它的工作原理:

'submit #loginForm': function(event) { 
      event.preventDefault(); 
      var username = $("#usernameInput").val(); 
      var password = $("#passwordInput").val(); 
      var loginCallback = function (error) { 
       if (error) { 
        Meteor.call("goOnline"); 
        FlashMessages.sendError(error.message); 
       } else { 
        FlashMessages.sendSuccess("Logged in as " + username + " successfully"); 
        Meteor.logoutOtherClients(function(error) { 
         if (error) { 
          FlashMessages.sendError(error.message); 
         } 
        }); 
       } 
      }; 
      Meteor.call("goOffline"); // need to manually go offline as old user does not go offline after login 
      Meteor.loginWithPassword(username, password, loginCallback); 
      clearSession(); 
     } 


'goOffline': function() { 
     Meteor.users.update({_id: this.userId}, {$set: {status: {online: false}}}); 
    }, 

    'goOnline': function() { 
     Meteor.users.update({_id: this.userId}, {$set: {status: {online: true}}}); 
    },