Faye:如何禁用客户发布的特定频道?

时间:2014-08-18 11:14:08

标签: javascript node.js chat faye

OH,HI

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

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

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

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

    编辑

    • 编辑:重命名"服务器"到服务器端客户端"
    • 编辑2:添加Note

2 个答案:

答案 0 :(得分:0)

该死的,我愚蠢。

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

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

    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
    

答案 1 :(得分:0)

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

  

您应始终确保您的分机呼叫回叫,否则可能会阻止在同一请求中传递其他消息。

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

if (token !== msgToken)
  message.error = 'Invalid subscription auth token';

// Call the server back now we're done
callback(message);