mirror of https://github.com/calzoneman/sync.git
Hopefully fix the duplicate login kick issue for retarded browsers
This commit is contained in:
parent
4c34625d48
commit
b3ea7069a8
|
@ -1,3 +1,10 @@
|
||||||
|
Sat Sep 7 23:38 2013 CDT
|
||||||
|
* lib/user.js: Add "loggingIn" field to act as a lock on async logins.
|
||||||
|
Delay further login attempts until the current login attempt finishes.
|
||||||
|
Should prevent cases where sending multiple logins quickly in
|
||||||
|
succession caused race conditions and thus odd "duplicate login"
|
||||||
|
kicks.
|
||||||
|
|
||||||
Sat Sep 7 15:43 2013 CDT
|
Sat Sep 7 15:43 2013 CDT
|
||||||
* lib/channel.js, lib/user.js: Add an extra check for channel.users[i]
|
* lib/channel.js, lib/user.js: Add an extra check for channel.users[i]
|
||||||
to write an error message (instead of kicking) when the same user that
|
to write an error message (instead of kicking) when the same user that
|
||||||
|
|
28
lib/user.js
28
lib/user.js
|
@ -20,6 +20,7 @@ var User = function(socket, Server) {
|
||||||
this.server = Server;
|
this.server = Server;
|
||||||
this.socket = socket;
|
this.socket = socket;
|
||||||
this.loggedIn = false;
|
this.loggedIn = false;
|
||||||
|
this.loggingIn = false;
|
||||||
this.saverank = false;
|
this.saverank = false;
|
||||||
this.rank = Rank.Anonymous;
|
this.rank = Rank.Anonymous;
|
||||||
this.global_rank = Rank.Anonymous;
|
this.global_rank = Rank.Anonymous;
|
||||||
|
@ -159,8 +160,28 @@ User.prototype.initCallbacks = function() {
|
||||||
var session = data.session || "";
|
var session = data.session || "";
|
||||||
if(pw.length > 100)
|
if(pw.length > 100)
|
||||||
pw = pw.substring(0, 100);
|
pw = pw.substring(0, 100);
|
||||||
if(self.name == "")
|
|
||||||
|
if (self.loggedIn)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (self.loggingIn) {
|
||||||
|
var j = 0;
|
||||||
|
// Wait until current login finishes
|
||||||
|
var i = setInterval(function () {
|
||||||
|
j++;
|
||||||
|
if (!self.loggingIn) {
|
||||||
|
clearInterval(i);
|
||||||
|
if (!self.loggedIn)
|
||||||
|
self.login(name, pw, session);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// Just in case to prevent the interval from going wild
|
||||||
|
if (j >= 4)
|
||||||
|
clearInterval(i);
|
||||||
|
}, 1000);
|
||||||
|
} else {
|
||||||
self.login(name, pw, session);
|
self.login(name, pw, session);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
self.socket.on("assignLeader", function(data) {
|
self.socket.on("assignLeader", function(data) {
|
||||||
|
@ -627,8 +648,10 @@ User.prototype.login = function(name, pw, session) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
|
self.loggingIn = true;
|
||||||
self.server.db.userLogin(name, pw, session, function (err, row) {
|
self.server.db.userLogin(name, pw, session, function (err, row) {
|
||||||
if(err) {
|
if(err) {
|
||||||
|
self.loggingIn = false;
|
||||||
self.server.actionlog.record(self.ip, name, "login-failure");
|
self.server.actionlog.record(self.ip, name, "login-failure");
|
||||||
self.socket.emit("login", {
|
self.socket.emit("login", {
|
||||||
success: false,
|
success: false,
|
||||||
|
@ -640,7 +663,7 @@ User.prototype.login = function(name, pw, session) {
|
||||||
for(var i = 0; i < self.channel.users.length; i++) {
|
for(var i = 0; i < self.channel.users.length; i++) {
|
||||||
if(self.channel.users[i].name.toLowerCase() == name.toLowerCase()) {
|
if(self.channel.users[i].name.toLowerCase() == name.toLowerCase()) {
|
||||||
if (self.channel.users[i] == self) {
|
if (self.channel.users[i] == self) {
|
||||||
Logger.errlog.log("Wat: user.login() but user"+
|
Logger.errlog.log("Wat: user.login() but user "+
|
||||||
"already logged in on channel");
|
"already logged in on channel");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -651,6 +674,7 @@ User.prototype.login = function(name, pw, session) {
|
||||||
if(self.global_rank >= 255)
|
if(self.global_rank >= 255)
|
||||||
self.server.actionlog.record(self.ip, name, "login-success");
|
self.server.actionlog.record(self.ip, name, "login-success");
|
||||||
self.loggedIn = true;
|
self.loggedIn = true;
|
||||||
|
self.loggingIn = false;
|
||||||
self.socket.emit("login", {
|
self.socket.emit("login", {
|
||||||
success: true,
|
success: true,
|
||||||
session: row.session_hash,
|
session: row.session_hash,
|
||||||
|
|
Loading…
Reference in New Issue