0

Meteor を使用してフレームワークを学習する簡単なアプリケーションを開発しています。accounts-passwordパッケージを組み込んだパッケージを使用していaccounts-baseます。

ユーザーはアカウントを作成し、その電子メール アドレスがログイン用のユーザー名として機能します。これはすべて、意図したとおりに完全に機能します。今、私はこれを次のレベルに引き上げたいと思っています。

一時的に設定された期間、ユーザーを一時的に禁止する機能が必要です-1週間としましょう。

この機能はパッケージを使用して可能ですか、accounts-passwordまたはこの機能を実現する別のパッケージが存在しますか? それ以外の場合、この機能を自分で実装するにはどうすればよいですか?

4

1 に答える 1

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');
    },
}
于 2016-10-08T19:06:09.843 に答える