Faye:如何禁用客户端发布的特定通道

Faye: How to disable specific channel for publish by clients?

本文关键字:通道 何禁用 客户端 Faye      更新时间:2023-09-26

OH, HI

我用node.js和faye编写的服务器创建聊天应用程序。

  1. 客户端订阅/messages/new
  2. 发送的消息:

    客户端--[publish to /messages]-->服务器端--[publish to /messages/new]-->所有客户端

但如果我是一个匿名的H4x0r我可以编辑客户端js文件,使我的客户端发布消息不是在/messages,而是在/messages/new。消息将通过服务器端客户端并直接转到客户端。我希望消息通过服务器端客户端,因为服务器做魔术:验证令牌,保存消息在redis数据库和日志

如何禁用客户端发布的特定通道?

我应该写自定义引擎吗?我没有在Faye服务器中找到任何通道配置。让我知道,如果你想看一些代码,不知道该给你看什么。

注意

createServer = ->
    server = http.createServer()
    server.listen settings.serverPort
    bayeux = new faye.NodeAdapter        ##################################
        mount: '/faye'                   # This is "server side client"
        timeout: 45                      # lol
    bayeux.attach server                 ##################################
    fayeClient = bayeux.getClient()
    log "listening on port #{settings.serverPort}..."
    return [fayeClient, bayeux]

编辑

  • 编辑:将"server"重命名为"server side client"
  • 编辑2:add Note

妈的,我真笨。

每条消息都经过服务器扩展,然后发送到侦听器(其他客户端)。

  1. 我为服务器端客户端添加了令牌。
  2. 入站扩展检查令牌
  3. 如果令牌不正确,不传播消息(不运行回调)
我代码:

incoming: (message, callback) ->
    # validate, if message has been sent by server
    if message.channel == channels.newMessages  # /messages/new
        # I added token for server side client
        if message.data.token != settings.serverToken
            return  # if message token is incorrect, don't run callback
    callback(message)  # send message to all listeners

现在这实际上是错误的,正如当前文档所述:

您应该始终确保您的分机调用回调,因为不这样做可能会阻止同一请求中其他消息的传递。

要实现服务器拒绝消息,您应该添加error属性并将其传递给回调

if (token !== msgToken)
  message.error = 'Invalid subscription auth token';
// Call the server back now we're done
callback(message);