OH,HI
我使用node.js和faye编写的服务器创建聊天应用程序。
/messages/new
这样的消息:
客户端--[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]
编辑
Note
答案 0 :(得分:0)
每条消息都通过服务器扩展,之后发送给侦听器(其他客户端)。
我的代码:
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);