我可以在 gundb 中使用JWT身份验证吗?如果是这样,它会大大减慢我的同步速度吗?我将尝试使用此处的教程进行测试,但想看看是否有任何我应该注意的“陷阱”。
问问题
1026 次
1 回答
4
API 已更改为使用中间件系统。将发布 SEA(安全、加密、授权)框架来处理此类事情。但是,您可以通过在服务器上执行以下操作来创建自己的:
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
});
});
通过钩子注册in
监听opt
器可以让这个中间件成为第一个(甚至在枪核心之前),这样你就可以过滤所有输入并在必要时拒绝它们(通过不调用to.next(msg)
)。
同样,要在客户端上添加标头,您需要注册一个侦听out
器(类似于我们为.通过这样做。随着它的稳定,更多的文档将会出现。in
msg.headers = {token: data}
to.next(msg)
老答案:
一个很晚的答案,对不起,这个问题没有尽快解决:
默认的 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!"}});
}
});
上面的示例拒绝所有写入并授权所有读取,但您可以用自己的规则替换此逻辑。
于 2016-11-11T07:47:21.517 回答