使用gundb进行JWT认证

jtl*_*sey 4 gun

我可以将JWT身份验证与gundb 一起使用吗?如果是这样,它会大大降低我的同步速度吗?我打算尝试使用此处的教程来实施测试,但想看看是否有任何我应该注意的“陷阱”。

mar*_*dal 5

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
  });
});
Run Code Online (Sandbox Code Playgroud)

in通过钩子注册监听器opt可以让这个中间件成为第一个(甚至在枪核心之前),这样你就可以过滤所有输入并在必要时拒绝它们(通过不调用to.next(msg))。

同样,要在客户端上添加标头,您需要注册一个out侦听器(类似于我们对 的操作in)并修改传出消息msg.headers = {token: data},然后将其转发到下一个中​​间件层(可能是 websocket/transport hooks)也通过这样做to.next(msg)。当它稳定下来时,会有更多文档来讨论这个问题。

旧答案:

一个很晚的答案,抱歉没有尽早解决这个问题:

默认的 websocket/ajax 适配器允许您更新headers在每个网络消息上传递的属性:

gun.opt({
  headers: { token: JWT },
});
Run Code Online (Sandbox Code Playgroud)

然后,您可以在服务器上根据令牌拦截并拒绝/授权请求:

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!"}});
    }
});
Run Code Online (Sandbox Code Playgroud)

上面的示例拒绝所有写入并授权所有读取,但您可以用自己的规则替换此逻辑。