2016-01-25 52 views
0

我想創建一個包含私人消息的多用戶登錄系統。 我用JavaScript創建了理論(只是爲了勾畫出理論和功能),我想知道我是否在正確的軌道上。 當然我會在後面的所有驗證中將其更改爲後端語言,這完全是爲了繪製草圖。用個人消息創建多個用戶登錄系統

// User database simulation 
var users = []; 

var defaultUser = { 
    'rights': 1, /* 0 - 3: 0 is banned, 1 is default, 2 is moderator, 3 is admin */ 
    'activated': false, 
    'createdAt': null, 
    'updatedAt': null, 
    'username': null, 
    'userId': null, 
    'email': null, 
    'pass': null, /* will be encrypted */ 
    'profile': { 
    'sex': null, 
    'age': null, 
    'avatar': null, 
    'updatedAt': null, 
    }, 
    'messages': { 
    'inbox': [], 
    'outbox': [], 
    'trash': [], 
    'drafts': [] 
    } 
}; 

var defaultMessage = { 
    'id': null, 
    'date': null, 
    'from': null, 
    'to': null, 
    'message': null 
}; 

var userManagement = { 
    'register': function(username, email, pass){ 
     var user = $.extend({}, defaultUser); 
     user.username = username; 
     user.email = email; 
     user.pass = pass; 
     user.userId = username + '_' + Math.floor(Date.now()/1000); 
     // If everything is valid, register: 
     // User database insert simulation 
     users.push(user); 
     console.log('Registered', user); 
    }, 
    'login': function(username, pass) { 
    // User database query simulation 
    for(var i = 0, l = users.length; i < l; i++) { 
     var user = users[i]; 
      if(user.username === username) { 
     if(user.pass === pass) { 
      console.log('Logged in', user); 
     } else { 
      console.log('Pass incorrect'); 
     } 
     } else { 
     console.log('User not found'); 
     } 
    } 
    }, 
    'forgotUsername': function(email) { 
    // User database query simulation 
    for(var i = 0, l = users.length; i < l; i++) { 
     var user = users[i]; 
     if(user.email === email) { 
     console.log('username ['+ user.username +'] send to ' + user.email); 
     } else { 
     console.log('User not found'); 
     } 
    } 
    }, 
    'forgotPass': function(username) { 
    // User database query simulation 
    for(var i = 0, l = users.length; i < l; i++) { 
     var user = users[i]; 
     if(user.username === username) { 
     console.log('pass from user ['+ user.username +'] send to ' + user.email); 
     } else { 
     console.log('User not found'); 
     } 
    } 
    }, 
    'getUserById': function(userId){ 
    var key; 
    for(var i = 0, l = users.length; i < l; i++) { 
     var user = users[i]; 
     if(user.userId === userId) { 
     return user;  
     } 
    } 
    return null; 
    }, 
    'getUserByUsername': function(username){ 
    for(var i = 0, l = users.length; i < l; i++) { 
     var user = users[i]; 
     if(user.username === username) { 
     return user;  
     } 
    } 
    return null; 
    } 
    /* TODO: updateProfile, activate */ 
} 

var message = { 
    'send': function(fromUserId, toUserId, msg){ 
    var sender = userManagement.getUserById(fromUserId); 
    var receiver = userManagement.getUserById(toUserId); 
    var message = $.extend({}, defaultMessage); 
    message.id = fromUserId + '_' + Math.floor(Date.now()/1000); 
    message.from = sender.username; 
    message.fromUserId = fromUserId; 
    message.to = receiver.username 
    message.toUserId = toUserId; 
    message.message = msg; 
    message.date = new Date(); 
    sender.messages.outbox.push(message); 
    receiver.messages.inbox.push(message); 
    } 
    /* TODO: delete, move etc. */ 
} 

userManagement.register('barry', '[email protected]', 'bcf2ibc'); 
userManagement.register('john', '[email protected]', 'bahjscb'); 

userManagement.login('test', 'blabla'); // fail 
userManagement.login('barry', 'blabla'); // fail 
userManagement.login('barry', 'bcf2ibc'); // success 
userManagement.login('John', 'bahjscb'); // success 
//userManagement.forgotPass('barry'); 

var barry = userManagement.getUserByUsername('barry'); 
var john = userManagement.getUserByUsername('John'); 

message.send(barry.userId, john.userId, 'My test message.'); 
message.send(barry.userId, john.userId, 'You received my previous message?'); 
message.send(john.userId, barry.userId, 'Yes I did received them.'); 

console.log(users); 

JS小提琴:https://jsfiddle.net/vmjs1n9n/12/

他們這樣,我設置每個用戶的私人信息,是一件好事呢?我會很感激其他人的建議!

+0

你的用例是什麼? –

+0

你的意思是? – Barry

回答

0

這是一個開始,如果您的主要目的是促進私人消息,那麼是的,每個用戶的私人消息是一件好事。

我的第一個念頭,你知道你重新發明了輪子嗎?如果我將這作爲業務需求,我將與現有的消息傳遞服務或協議集成,而不必處理這類數據的長期管理。即使是身份驗證,在這一天中,您也應該嘗試再次實施某種開放式身份驗證標準,例如OAuth,以減少您需要花費的時間,以便使其脫離實際並長期運行。

我通常不會將消息數據物理放入發件人的發件箱,然後再放入收件箱收件箱,主要是因爲您的數據存儲空間會增加一倍,但我想像電子郵件,原始郵件的路由副本會使管理的信息非常簡單,同時使得一個用戶無法訪問另一個用戶的信息變得很困難。

因爲你在做原型,所以很難提供體面的評論,因爲你已經提到了你將在後端做不同的事情,所以我不想再次猜測你已經決定去哪裏這個。對於像這樣的簡單系統,UI應該是非常精簡的,而後端的邏輯,特定的邏輯就是我希望提供未來評論和見解的地方。

+0

感謝您的評論!我會看看oAuth,並且可能會重新考慮沿線的一些想法。私人消息是我想要使用的功能的一個例子。是的,我知道我正在重新發明輪子,但它的樂趣可以建立,而且我將在此過程中學到很多東西。謝謝克里斯。 – Barry