Added optional authentication and the ability to call another function to further validate the token

* Optional authentication is useful when you wish to serve both secure and unsecured services via the same server socket
* The ability to specify an additional function to be called to further validate the token is useful when you wish to be able to expire tokens for some reason
This commit is contained in:
David Damerell 2014-10-24 17:01:53 +01:00
parent dbb4e95415
commit 9389672a9d

View File

@ -13,24 +13,41 @@ function noQsMethod(options) {
Namespace.events.push('authenticated'); Namespace.events.push('authenticated');
} }
} }
var auth_timeout = setTimeout(function () { if(options.required){
socket.disconnect('unauthorized'); var auth_timeout = setTimeout(function () {
}, options.timeout || 5000); socket.disconnect('unauthorized');
}, options.timeout || 5000);
}
socket.on('authenticate', function (data) { socket.on('authenticate', function (data) {
clearTimeout(auth_timeout); if(options.required){
clearTimeout(auth_timeout);
}
jwt.verify(data.token, options.secret, options, function(err, decoded) { jwt.verify(data.token, options.secret, options, function(err, decoded) {
if (err) { var onError = function(){
return socket.disconnect('unauthorized'); return socket.disconnect('unauthorized');
};
if (err) {
onError();
} }
socket.decoded_token = decoded; var onSuccess = function(){
socket.emit('authenticated'); socket.decoded_token = decoded;
if (server.$emit) { socket.emit('authenticated');
server.$emit('authenticated', socket); if (server.$emit) {
} else { server.$emit('authenticated', socket);
server.server.sockets.emit('authenticated', socket); } else {
server.server.sockets.emit('authenticated', socket);
}
};
if(options.additional_auth){
options.additional_auth(decoded, onSuccess, onError);
}else{
onSuccess();
} }
}); });
}); });