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