2017-03-15 1 views
0

私はonConnectionフックといくつかのテンプレートヘルパーを使って統計情報を取得しています。しかし今は、私が登録ユーザーのときにこれらの操作を除外したくありません。 問題は、onConnectionフックでMeteor.user()を使用できないため、ユーザーがログインしているかどうかを確認するにはどうすればいいですか?コードに関するMeteor:onConnection、ユーザーがログインしているかどうかを確認してください

は、

Meteor.onConnection(function(conn) { 
if(Meteor.user()) { 
    console.log("you are logged in") 
} else { 
    console.log("u are not logged in") 
} 
}); 

を表示多くはありませんそれは本当の例ではないのですが、それはちょうど私が私ができることを理解し、私は エラー

err [Error: Meteor.userId can only be invoked in method calls. Use this.userId in publish functions.] 

をやりたいシンプル示しメソッドでMeteor.user()を使用しますが、ユーザーがログインしている場合はどのようにonConnectionで調べることができますか?

+0

のpubsub APIの詳細は、あなたが試したもののためのコードをしてください示してお読みください。 – zim

+0

@zimエラーメッセージに示されているようにthis.userIdを使ってみましたか? – equalsound

+0

を追加しましたか? – zim

答えて

0

明らかに、あなたが述べたように、Meteorのドキュメントはこれを達成するための洞察を提供していません。私はaccounts-baseの情報源を通ってかなりの時間を費やし、あなたがネイティブに求めていることをする方法を見ません。

あなたがログインして現在のIPアドレスを保存するたびにUsersコレクションを更新できる場合は、これを現在の接続がログインしているかどうかを確認する方法として使用できます。

Meteor.onConnection((connection) => { 
    var user = Meteor.users.findOne({ 
    'user.profile.currentIp': connection.clientAddress 
    }); 

    if (user) { 
    console.log("you are logged in") 
    } else { 
    console.log("u are not logged in") 
    } 
}); 

ユーザーの現在のIPを設定して削除するには、ログインとログアウトのフックを必ず追加してください。私はこのアプローチをテストしていませんが、理論的にはうまくいくはずです。

+0

クライアント側でonConnectionを使用することはできますか? – Ruben

+0

いいえ、そのサーバ上でのみ – jordanwillis

+1

@Rubenクライアント上でアクセスできる 'Meteor.connection'オブジェクトがあります。おそらく同様のメソッドが内部にありますか?私はすべてのDDPの着信/発信メッセージをコンソールに出力する前にそれを使用しました。 – jordanwillis

0

統計的な理由から、出版物を使用することをお勧めします。彼らはより洗練されたAPIを持っているので、接続をより詳細に制御できます。

Meteor.publish('users.trackPresence', function() { 
    // Both this.userId && this.connection are available to be called from here 

    self.onStop(function(){ 
    // user went offline 
    }); 

    this.ready(); 
}); 

と、クライアント上のユーザーが存在し、これが事実である場合でも、加入していた場合、あなたは確認することができます:あなたはTracker.autorun内から加入したときに

Tracker.autorun(function(){ 
    if (!Meteor.userId()) 
    Meteor.subscribe('users.trackPresence'); 
}); 

流星は自動的に退会/再サブスクライブを扱います

はここ https://docs.meteor.com/api/pubsub.html

関連する問題