2013-06-04 4 views
0

Я работаю с системой обмена сообщениями faye, и я хочу добавить аутентификацию! Я проделал свой путь через веб-сайт и следил за учебником.аутентификация faye с токеном

На клиенте у меня есть расширение для исходящих сообщений:

var droneFaye = new faye.Client("/faye", { 
      timeout: 120 
     }); 
var USER_TOKEN = 'ifd63cylqwsyaq9c2ptzywjujgtfpxs'; 

    droneFaye.addExtension({ 
     outgoing: function(message, callback) { 
      if (message.channel !== '/meta/subscribe') 
       return callback(message); 

      message.ext = message.ext || {}; 
      message.ext.token = USER_TOKEN; 
      console.log(message); 
      callback(message); 
     } 
    }); 

На сервере:

var token = 'ifd63cylqwsyaq9c2ptzywjujgtfpxs' 

    var serverAuth = { 
    incoming: function(message, callback) { 
     // Let non-subscribe messages through 

     if (message.channel !== '/meta/subscribe') 
      return callback(message); 

     // Get subscribed channel and auth token 
     var msgToken = message.ext && message.ext.token; 

     // Find the right token for the channel 
     if (token !== msgToken) { 
      message.error = 'Invalid subscription auth token'; 
     } 
     console.log(message); 
     callback(message); 
    } 
}; 

var adapter = new faye.NodeAdapter({ 
    mount:'/faye', 
    timeout:45 
}); 
adapter.addExtension(serverAuth); 
adapter.attach(httpServer); 

У меня есть подписка на сервере, как это:

adapter.getClient().subscribe("/drone/move", function(cmd) {}); 

Хорошо! Поэтому, когда я запустить сервер и никаких КЛИЕНТ это уже вызывает расширение для подписки и будет выводить на консоль:

{ channel: '/meta/subscribe', 
    clientId: '2isdeb0ds77zl0lh82ob1kqu29y1cajnv80', 
    subscription: '/drone/move', 
    id: '2', 
    error: 'Invalid subscription auth token' } 

После того, как клиент подключается к серверу, он будет снова вызвать расширение, и это будет выведите это:

{ channel: '/meta/subscribe', 
    clientId: '3kechs0c7smpc05z5o7d0a8qcd301d8zi41', 
    subscription: '/drone/move', 
    id: '3', 
    ext: { userId: 18787, token: 'ifd63cylqwsyaq9c2ptzywjujgtfpxs' } } 

Так что это выглядит хорошо! Но никакие другие сообщения не появятся на сервере, хотя у них есть правильный токен, и нет сообщения об ошибке!

Просто для информации. Если вы добавите ключ ошибки со значением в объект сообщения, он не будет передавать сообщение в свою подписку ... его должно быть так! ..

Также, когда я комментирую message.error в расширении он работает нормально, но, конечно, аутентификации нет.

Так кто-нибудь знает, почему сервер вызывает расширение, даже если нет клиента, а во-вторых, почему faye не передает сообщение своей подписке, даже если в объекте сообщения нет ошибки?

thx!

ответ

0

Вопрос был также задан вопрос, и answered here:

Это вызвано вызовом adapter.getClient().subscribe().

[...] серверный клиент (<adapter>.getClient()) возвращает соединение с сервером, таким образом, просматривает те же расширения (входящие, исходящие), что и клиент.

[...] Прикрепите исходящее расширение, и вы увидите, что он отвечает на сервер-клиент.

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