2016-10-08 23 views
0

我正在開發一個使用Meteor學習框架的簡單應用程序。我正在使用包含accounts-base包的accounts-password包。如何在Meteor中暫時禁止用戶

用戶將創建一個帳戶,他們的電子郵件地址將作爲他們登錄的用戶名。這一切都按預期完美工作。現在我想把這個提升到一個新的水平。

我想暫時禁止一個用戶臨時設定的時間段 - 比方說一個星期。

使用accounts-password軟件包可以實現此功能,還是有另一個軟件包可以完成此功能?否則,我該如何自己實現這個功能?

回答

1

如何在每個用戶的用戶集合中使用類似isBanned標誌?這樣,您在登錄用戶之前檢查此標誌。您可以通過在禁用時應用日期字段來進一步擴展此功能,並且稍後可以計算經過的時間以查看是否可以自動解除禁用。

db.users.findOne() 
{ 
    [...] 
    "username" : "superadmin", 
    "profile" : { 
     "isActive" : true, 
     "createdBy" : "system", 

     // is this user banned? 
     "isBanned" : false, 

     "updatedAt" : ISODate("2016-10-07T17:33:42.773Z"), 
     "loginTime" : ISODate("2016-10-07T17:25:44.068Z"), 
     "logoutTime" : ISODate("2016-10-07T17:33:42.660Z") 
    }, 
    "roles" : [ 
     "superAdmin" 
    ] 
} 

您的登錄表單事件可能是這樣的:

Template.loginForm.events({ 

    'submit #login-form': function(event,template){ 
     event.preventDefault(); 

// Check for isBanned flag 

if(Meteor.users.find({username: template.find("#userName").value,isBanned: false}) { 
     Meteor.loginWithPassword(
      template.find("#userName").value, 
      template.find("#password").value, 
      function(error) { 
       if (error) { 
        // Display the login error to the user however you want 
        console.log("Error logging in. Error is: " + error); 
        Session.set('loginErrorMessage', error.message); 
        Router.go('/'); 
       } 
      } 
     ); 
     Meteor.call('updateLoginTime'); 
     Router.go('loggedIn'); 
    }, 
} 
+0

我喜歡這個主意,雖然標誌可能不應該輪廓場坐進去,因爲這是由用戶客戶端編輯。 –

+0

@BarryMichaelDoyle - 好奇,怎麼樣?我對流星也相當陌生,因此不知道整個這種安全漏洞。 – blueren

+1

您可以在官方文檔中閱讀關於它的所有信息:https://guide.meteor.com/accounts.html#dont-use-profile –