2014-08-18 4 views
0

OH, HIFaye: Как отключить определенный канал для публикации клиентами?

Я создаю приложение чата с сервером, написанным с 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] 

редактирует

  • Edit: переименовать "сервер" на "стороне клиента сервер"
  • Edit2: добавить Note
+0

Минуя сервер будет означать, вы пиринговые соединения, которого у вас нет. – DanFromGermany

+0

Да, я не выражал себя ясно. Сообщение обходит мой _server_ - faye.nodeAdapter, прикрепленный к http-серверу, который фактически является сторонним сервером. Мне нужно управлять потоком сообщений _ для блокировки сообщений на определенном канале от клиентов браузера. – voy

ответ

0

Черт, Я' m тупой.

Каждое сообщение отправляется через серверные расширения, после чего отправляется слушателям (другим клиентам).

  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 
0

Это на самом деле не так в настоящее время, как текущие documentation состояний:

Вы всегда должны убедиться, что расширение вызывает функцию обратного вызова, поскольку в противном случае сделать это может блокировать доставку других сообщений в одном запросе.

Чтобы добиться отказа от сообщения на сервере, вы должны добавить свойство ошибок к нему и передать его обратный вызов

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^