首页 > 解决方案 > 如何在 cote 上仅启用 Sockend 的部分 api?

问题描述

在文档中显示,当用户创建套接字连接时,它可以创建命名空间:

let socketNamespaced = io.connect('/rnd');

对于sockend.js服务器初始化,没有提到命名空间。

const sockend = new cote.Sockend(io, {
    name: 'Sockend',
    // key: 'a certain key'
});

据我了解,客户端选择连接到哪个命名空间。现在,为了避免安全问题,有没有办法在服务器端强制执行套接字命名空间。

例如

const sockend = new cote.Sockend(io, {
    name: 'Sockend',
    namespace: '/cmd'
});

这样,只有这个命名空间会暴露给套接字,并且没有机会更改客户端命名空间并将整个 api 开放给 sockend。

标签: cote

解决方案


您在 Responder 中定义命名空间。然后使用该属性respondsTo定义 Sockend 公开的类型:

var cmdResponder = new cote.Responder({
  name: 'CMD Responder',
  namespace: 'cmd',
  respondsTo: [ 'hello' ]
})
cmdResponder.on('hello', async(req) => { return 'hi' })

如果没有respondsTo在 Responders 中设置,Sockend 本身不会公开任何类型。

在这个例子中,/cmd命名空间只会回答“你好”。


推荐阅读