diff --git a/.gitignore b/.gitignore index dbf0821..a504cda 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ +.idea node_modules/* \ No newline at end of file diff --git a/lib/index.js b/lib/index.js index 08e6b8a..ef96b89 100644 --- a/lib/index.js +++ b/lib/index.js @@ -27,29 +27,39 @@ function noQsMethod(options) { if(options.required){ clearTimeout(auth_timeout); } - jwt.verify(data.token, options.secret, options, function(err, decoded) { - var onError = function(){ - return socket.disconnect('unauthorized'); + // error handler + var onError = function(err, code) { + if (err) { + code = code || 'unknown'; + var error = new UnauthorizedError(code, { + message: (Object.prototype.toString.call(err) === '[object Object]' && err.message) ? err.message : err + }); + socket.emit('unauthorized', error, function() { + socket.disconnect('unauthorized'); + }); + return; // stop logic, socket will be close on next tick + } }; if (err) { - onError(); + return onError(err, 'invalid_token'); } + // success handler var onSuccess = function(){ - socket.decoded_token = decoded; - socket.emit('authenticated'); - if (server.$emit) { - server.$emit('authenticated', socket); - } else { - server.server.sockets.emit('authenticated', socket); - } + socket.decoded_token = decoded; + socket.emit('authenticated'); + if (server.$emit) { + server.$emit('authenticated', socket); + } else { + server.server.sockets.emit('authenticated', socket); + } }; - if(options.additional_auth){ - options.additional_auth(decoded, onSuccess, onError); - }else{ + if(options.additional_auth && typeof options.additional_auth === 'function') { + options.options.additional_auth(decoded, onSuccess, onError); + } else { onSuccess(); } });