2013-06-04 118 views
0

我與王菲的郵件系統工作,我想補充的認證!我通過網站工作並遵循教程。王菲認證令牌與

在客戶端我有傳出消息的擴展:

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它工作正常,但當然沒有認證。

因此,沒有人知道爲什麼服務器調用,即使沒有客戶端的延伸和第二爲什麼王菲不給消息,即使是在消息對象中沒有錯誤的訂閱?

thx!

回答

0

問題也是問,answered here

這是由呼叫引起adapter.getClient().subscribe()

服務器端客戶端(<adapter>.getClient())返回到服務器的連接,因此與客戶端通過相同的擴展(傳入,傳出)。

[...]附加傳出擴展,你會看到它得到響應,服務器 - 客戶端。