1

ログインしているすべてのユーザーが5秒ごとに呼び出すキープアライブメソッドを使用して、流星アプリでログインしているユーザーを追跡しています。

ユーザーIDを「最後に見た」タイムスタンプで保存するmongoコレクションを更新します。

Meteor を 0.6.5 に更新するまでは、誰かが既にログインしているユーザー名を使用してログインするのを防ぐために、パッケージ内password_server.jsのファイルに次のコードを追加しましたaccount-password

var alreadyConnected=false;
    Meteor.call("isUserConnected", user._id, function(err, result) {
      alreadyConnected=result;
    });
if(alreadyConnected)throw new Meteor.Error(403, "User Already Connected");

直後の:

 var user = Meteor.users.findOne(selector);
  if (!user)
    throw new Meteor.Error(403, "User not found");

*isUserConnected は、サーバー コードで作成したメソッドで、ユーザーが過去 5 秒間にキープアライブ シグナルを送信したかどうかを確認します。

更新後、動作しなくなり、パッケージファイルの編集方法がわかりません..

4

2 に答える 2

0

キープアライブを使用してユーザーが接続されているかどうかを追跡するのは非効率的です。接続されたソケットを追跡するユーザーステータスパッケージを使用できます。たとえば、次のようになります。

https://github.com/mizzao/meteor-user-status

2 つ目は、接続を許可するか許可しないかをクライアントが決定できるようにすることは安全ではありません (特に、遅延が発生し、すべてのユーザーをクライアント側に公開する必要があります)。ユーザー名をチェックし、そのようなユーザーが既に接続されているかどうかを確認し、接続している場合はログインを拒否する、サーバー側の新しいログイン ハンドラー。新しいログイン ハンドラーを定義してクライアントから呼び出す方法については、以下のパッケージを参照してください。

https://github.com/mizzao/meteor-accounts-testing

于 2013-09-29T12:07:43.557 に答える
0

Meteor アカウントを使用すると、公式のlogoutotherclientsメソッドを使用できます

現在のユーザーとしてログインしている他のクライアントをログアウトしますが、この関数を呼び出したクライアントはログアウトしません。

たとえば、ユーザーのブラウザーで呼び出された場合、そのブラウザーでの接続はログインしたままになりますが、そのユーザーとしてログインしている他のブラウザーまたは DDP クライアントはログアウトされます。

注意: これは、クライアント側から呼び出す必要があります。サーバー側からより強力なものを処理する必要がある場合は、あなた次第です。

于 2014-02-26T14:55:27.560 に答える