2016-10-08 1 views
0

Je développe une application simple en utilisant Meteor pour apprendre le framework. J'utilise le package accounts-password qui contient le package accounts-base.Comment interdire un utilisateur temporairement dans Meteor

L'utilisateur créera un compte et leur adresse e-mail servira de nom d'utilisateur pour se connecter. Tout fonctionne parfaitement bien comme prévu. Maintenant, je veux prendre cela au niveau suivant.

Je souhaite avoir la possibilité d'interdire temporairement un utilisateur pour une période de temps définie, par exemple une semaine.

Cette fonctionnalité est-elle possible à l'aide du module accounts-password ou existe-t-il un autre module qui remplira cette fonctionnalité? Sinon, comment puis-je implémenter cette fonctionnalité par moi-même?

Répondre

1

Que diriez-vous d'employer quelque chose comme l'indicateur isBanned dans la collection d'utilisateurs contre chaque utilisateur? De cette façon, vous vérifiez ce drapeau avant de vous connecter à l'utilisateur. Vous pouvez prolonger ceci en ayant un champ de date quand l'interdiction a été appliquée et plus tard avoir un moyen de calculer le temps écoulé pour voir si l'interdiction peut être levée automatiquement.

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" 
    ] 
} 

Vos événements formulaire de connexion peuvent être comme:

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

J'aime cette idée, bien que le drapeau ne devrait probablement pas assis à l'intérieur du champ de profil parce que c'est modifiable par le côté client utilisateur. –

+0

@BarryMichaelDoyle - Curieux, comment? Je suis également assez nouveau pour météore et donc ne connais pas l'intégralité d'un tel trou de sécurité. – blueren

+1

Vous pouvez lire tout à ce sujet ici dans les documents officiels: https://guide.meteor.com/accounts.html#dont-use-profile –