分散 ddp クライアント用のパッケージを作成しています
基本的なルーチンは次のとおりです。
- クライアント接続
- 新しい場合は、Diffie–Hellman 鍵交換アルゴリズムを使用して独自の鍵と秘密をネゴシエートします
- 次に、キーと暗号化されたパスワードでログインします
ユーザーは、指定された IP で検索することにより、クライアントを自分のアカウントに割り当てることができます
このようにして、自動クライアント登録が行われます。
私が解決したいのは、サーバー側でMeteor.userIdに似た機能を設計することです
step1: ddp クライアントのログイン (DH アルゴリズムをスキップ)
//client:
DDPClient.call('register',[key:key,token:token, ip:ip]);
//server
Meteor.methods({
'register' : function(options){
var self = this;
// check key token
// store registered clientId similar to Meteor.userId in currentContext
// self contains field _sessionData;
// storing data inside this method works fine
_.extend(self._sessionData, {clientId: ID }
}
});
step2: ddp クライアントが他のメソッドを呼び出す
//client:
DDPClient.call('other-method',[]);
//server
Meteor.methods({
'other-method' : function(options){
var self = this;
//this returns what we set inside register method
console.log(self._sessionData.clientId);
}
});
問題は Meteor.publish メソッドにあり、有効な ClientID を使用して現在のコンテキストですべてのサブスクリプションを簡単に再起動する方法はありますか? livedata パッケージの setUserId メソッドをたどることができますが、触れたくない多くの内部を使用します
これは動作する必要があります
Meteor.publish('data' : function(){
var self = this;
var clientId = ?????
return Data.find({owner : clientId});
});
または、私のタスクを達成するための他の方法はありますか? クライアントIDをコンテキストに保持したいだけなので、メソッド呼び出しごとに承認する必要はありません
この解決策は受け入れられません
Meteor.publish('data', function(clientId){
});