【问题标题】:How to ban a user temporarily in Meteor如何在 Meteor 中暂时禁止用户
【发布时间】:2016-10-08 18:45:01
【问题描述】:

我正在使用 Meteor 开发一个简单的应用程序来学习框架。我正在使用包含accounts-base 包的accounts-password 包。

用户将创建一个帐户,他们的电子邮件地址将作为他们登录的用户名。这一切都按预期工作得很好。现在我想把它提升到一个新的水平。

我希望能够在一段时间内暂时禁止用户 - 比如说一周。

使用accounts-password 包是否可以实现此功能,或者是否存在另一个可以实现此功能的包?否则我怎么能自己实现这个功能?

【问题讨论】:

    标签: meteor temporary meteor-useraccounts


    【解决方案1】:

    如何在 users 集合中针对每个用户使用 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');
        },
    }
    

    【讨论】:

    • 我喜欢这个主意,尽管标志可能不应该放在配置文件字段中,因为它可以由用户客户端编辑。
    • @BarryMichaelDoyle - 很好奇,但是怎么样?我对流星也很陌生,因此不知道整个安全漏洞。
    • 您可以在官方文档中阅读所有相关信息:guide.meteor.com/accounts.html#dont-use-profile
    • 谢谢。在阅读了与此相关的相关链接列表后,我肯定是在菜鸟流星开发人员的中心。回到主题,(a) 拒绝 Meteor.users 的更新 (b) 使用用户配置文件数据维护一个单独的集合不成功吗?
    • 问题是,如果您只是在客户端检查它,那么有知识的用户可以很容易地覆盖它。这应该在服务器端强制执行。您可以阻止用户登录或允许登录并限制活动。有关想法,请参阅 validateLoginAttempt
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多