From cb538c152af92538be11f7aedbb720340b772fe1 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Sat, 13 May 2017 00:27:04 +0800 Subject: [PATCH] check user Whether already logined from other location --- config/lib/socket.io.js | 41 ++++++++++++------- .../controllers/chat.client.controller.js | 2 +- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/config/lib/socket.io.js b/config/lib/socket.io.js index 10576e3a..3e5848bb 100644 --- a/config/lib/socket.io.js +++ b/config/lib/socket.io.js @@ -98,26 +98,37 @@ module.exports = function (app, db) { passport.initialize()(socket.request, {}, function () { passport.session()(socket.request, {}, function () { if (socket.request.user) { - // check ban list + var logined = false; var banned = false; - for (var i = io.banClients.length - 1; i >= 0; i--) { - var buser = io.banClients[i]; - if (buser.expires <= Date.now()) { //already expires, remove it - io.banClients.splice(io.banClients.indexOf(buser), 1); - continue; - } else { - var address = socket.handshake.address; - if (buser.user.username === socket.request.user.username) { //username in ban list - banned = true; - next(new Error('username "' + buser.user.username + '" is banned from the server'), false); - } else if (buser.ip === address) { //ip in ban list - banned = true; - next(new Error('ip "' + buser.ip + '" is banned from the server'), false); + + // check user already login + io.chatClients.forEach(function (s) { + if (s.request.user.username === socket.request.user.username) { + logined = true; + next(new Error('username "' + socket.request.user.username + '" already login from other location'), false); + } + }); + // check ban list + if (!logined) { + for (var i = io.banClients.length - 1; i >= 0; i--) { + var buser = io.banClients[i]; + if (buser.expires <= Date.now()) { //already expires, remove it + io.banClients.splice(io.banClients.indexOf(buser), 1); + continue; + } else { + var address = socket.handshake.address; + if (buser.user.username === socket.request.user.username) { //username in ban list + banned = true; + next(new Error('username "' + buser.user.username + '" is banned from the server'), false); + } else if (buser.ip === address) { //ip in ban list + banned = true; + next(new Error('ip "' + buser.ip + '" is banned from the server'), false); + } } } } - if (!banned) { + if (!logined && !banned) { next(null, true); } } else { diff --git a/modules/chat/client/controllers/chat.client.controller.js b/modules/chat/client/controllers/chat.client.controller.js index 49a73671..bf8b8a32 100644 --- a/modules/chat/client/controllers/chat.client.controller.js +++ b/modules/chat/client/controllers/chat.client.controller.js @@ -25,7 +25,7 @@ function init() { // If user is not signed in then redirect back home if (!Authentication.user) { - $state.go('home'); + $state.go('authentication.signin'); } registerCallback();