2014-06-24 4 views
0

Я использую сокет IO с методом простого токена аутентификации (на стороне сервера):Socket.io неудача разрешение не повторить попытку восстановить

io.use(function(socket, next){ 

var handshake = socket.request; 
if(token == handshake._query.token) 
{ 
    console.log('Client authorized'); 
    next(); 
} 
else 
{ 
    console.log('Client not authorized'); 
    next(new Error('not_authorized')); 
    socket.disconnect(); 
} 

});

Проблема заключается в том, что если клиент не выполнил авторизацию в первый раз (неправильный токен), он не будет повторно подключаться, чтобы подключиться, даже если я отправлю новое ручное соединение, оно не будет реконструироваться до полной обновления страницы. Cliend сторона:

var socket = io.connect(this.adress, {query: 'token=123456789', transports:['websocket', 'polling'] }); 
socket.on('error', function(err){ 
       console.log(err); 
       if(err == 'not_authorized') 
       { 

        console.log('gettin toke');//NOT ENTERING HERE 
       } 
       PS.connected = false; 
      }); 

Как я могу повторить заново с другим параметром?

Обход, установите эти переменные againg повторить попытку подключения:

   PS.socket.socket.connecting = false; 
       PS.socket.socket.options.query = 'token='+tok; 

ответ

0

Согласно documentation sample вы не должны использовать socket.disconnect();. Случай с вашей стороны error не срабатывает именно из-за этой строки.

Edit:

Вы также можете попытаться установить forceNew для true в настройках подключения при повторном подключении:

var socket = io.connect(this.adress, { 
    query: 'token=123456789', 
    transports:['websocket', 'polling'], 
    forceNew: true 
}); 
+0

Даже удаление, что не решает. Похоже, что при отсутствии авторизации соединение не может быть повторено. – albanx

+0

Я нашел решение. Взгляните на мое редактирование – Curious

+0

Я тестировал, и он не работает, я нашел обходное решение для версии 0.9. В редакции – albanx

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