【问题标题】:Faye: How to disable specific channel for publish by clients?Faye:如何禁用客户端发布的特定频道?
【发布时间】:2014-10-11 06:54:20
【问题描述】:

哦,嗨

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

  1. 客户订阅/messages/new
  2. 这样的消息:

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

但如果我是 Anonymus 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]

编辑

  • 编辑:将“服务器”重命名为“服务器端客户端”
  • Edit2:添加Note

【问题讨论】:

  • 绕过服务器意味着你有对等连接,而你没有。
  • 是的,我没有表达清楚。消息绕过我的 服务器 - faye.nodeAdapter 附加到 http 服务器,这是事实上的服务器端客户端。我需要控制 消息流 以阻止来自浏览器客户端的特定通道上的消息。

标签: javascript node.js chat faye


【解决方案1】:

该死的,我很笨。

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

  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

【讨论】:

    【解决方案2】:

    如今这实际上是错误的,正如当前的documentation 所说:

    您应始终确保您的扩展程序调用回调,否则可能会阻止同一请求中其他消息的传递。

    要实现服务器拒绝消息,你应该给它添加错误属性并将它传递给回调

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

    【讨论】:

      猜你喜欢
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 2011-04-01
      • 1970-01-01
      相关资源
      最近更新 更多