我正在为分布式 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){
});