使用 gundb 进行 JWT 身份验证
JWT authentication with gundb
我可以使用 JWT authentication with gundb? And if so, would it dramatically slow down my sync speed? I was going to try and implement a test using the tutorial here 但想看看是否有任何 'gotchas' 我应该知道的。
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
});
});
通过 opt
挂钩注册 in
侦听器让这个中间件成为第一个(甚至在 gun 核心之前),这样你就可以过滤所有输入并在必要时拒绝它们(通过不调用 to.next(msg)
).
同样,要在客户端上添加 headers,您需要注册一个 out
侦听器(类似于我们为 in
所做的)并修改传出消息以具有 msg.headers = {token: data}
然后通过 to.next(msg)
将它传递给下一个中间件层(可能是 websocket/transport 钩子)。随着它的稳定,会有更多文档出现。
旧答案:
很晚才回答,很抱歉没有早点解决这个问题:
默认的 websocket/ajax 适配器允许您更新一个 headers
属性 并在每个网络消息上传递:
gun.opt({
headers: { token: JWT },
});
然后您可以在服务器上根据令牌拦截和 reject/authorize 请求:
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!"}});
}
});
以上示例拒绝所有写入并授权所有读取,但您可以用自己的规则替换此逻辑。
我可以使用 JWT authentication with gundb? And if so, would it dramatically slow down my sync speed? I was going to try and implement a test using the tutorial here 但想看看是否有任何 'gotchas' 我应该知道的。
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
});
});
通过 opt
挂钩注册 in
侦听器让这个中间件成为第一个(甚至在 gun 核心之前),这样你就可以过滤所有输入并在必要时拒绝它们(通过不调用 to.next(msg)
).
同样,要在客户端上添加 headers,您需要注册一个 out
侦听器(类似于我们为 in
所做的)并修改传出消息以具有 msg.headers = {token: data}
然后通过 to.next(msg)
将它传递给下一个中间件层(可能是 websocket/transport 钩子)。随着它的稳定,会有更多文档出现。
旧答案:
很晚才回答,很抱歉没有早点解决这个问题:
默认的 websocket/ajax 适配器允许您更新一个 headers
属性 并在每个网络消息上传递:
gun.opt({
headers: { token: JWT },
});
然后您可以在服务器上根据令牌拦截和 reject/authorize 请求:
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!"}});
}
});
以上示例拒绝所有写入并授权所有读取,但您可以用自己的规则替换此逻辑。