发布于 2016-11-11 15:47:22
API已更改为使用中间件系统。SEA (Security,Encryption,Authorization,安全、加密、授权)框架将发布来处理这样的事情。但是,您可以通过在服务器上执行以下操作来执行您自己的操作:
Gun.on('opt', function(ctx){
if(ctx.once){ return }
ctx.on('in', function(msg){
var to = this.to;
// process message.
to.next(msg); // pass to next middleware
});
});通过opt钩子注册in侦听器可以让这个中间件成为第一个(甚至在枪核之前),这样您就可以过滤所有输入并在必要时拒绝它们(通过不调用to.next(msg))。
同样,要在客户机上添加headers,您需要注册一个out侦听器(类似于我们对in所做的操作),并修改传出消息以使其具有msg.headers = {token: data},然后通过执行to.next(msg)将其转发到下一个中间件层(可能是websocket/传输挂钩)。随着它的稳定,还会有更多的文档出现。
老生常谈:
非常晚的回答,很抱歉没有更快地解决这个问题:
默认的websocket/ajax适配器允许您更新在每条网络消息上传递的headers属性:
gun.opt({
headers: { token: JWT },
});在服务器上,您可以根据令牌截取和拒绝/授权请求:
gun.wsp(server, function(req, res, next){
if('get' === req.method){
return next(req, res);
}
if('put' === req.method){
return res({body: {err: "Permission denied!"}});
}
});上面的示例拒绝所有写操作并授权所有读操作,但是您可以用自己的规则替换此逻辑。
https://stackoverflow.com/questions/38598391
复制相似问题