2011-05-10 76 views
3

我是新手,我正在構建一個遊戲,用戶需要登錄並且可以與其他當前登錄的用戶進行交互。驗證用戶/套接字io

我最初的想法是,他們登錄後,將他們的/他們的websocket客戶端ID添加到當前登錄的用戶數組,並有我操縱知道誰登錄或不。

這是一個正常的方式去做這種事情嗎?

謝謝!

回答

4

取決於您對「正常」的定義。 ;-)

通常,您使用的服務器將提供一些管理「用戶狀態」的機制,包括用戶是否已登錄到您的應用程序。

例如,節點的「表達」庫(和「連接」表達應用「下」)提供了一個req.session對象只是這個目的,所以你可以做這樣的事情:

// user login via POST 
// assumes we're posting two values: username and password 
// as urlencoded data 

app.post('/login',function(req,res){ 

    var username=req.body['username']||'', 
     password=req.body['password']||''; 

    // check post data (username,password) 
    // against list of allowed users 

    if(isAuthorized(username,password)) { // you provide isAuthorized() 
    req.session.authorized=true; 
    } 
    else { 
    // display an error message to user 
    // and redirect back to the login form 
    } 
}); 

// user logout via GET 
app.get('/logout',function(req.res){ 
    req.session.destroy(); 
}); 

然後當你想爲用戶提供受保護的頁面,首先檢查req.session.authorized是否爲真,如果不是,則重定向到登錄表單。

見明示的文檔的更多的http://expressjs.com/guide.html

+0

登錄用戶的子集之間的通信如何?我會用一些快遞的部分來識別它們嗎?或在連接,當授權=真時,我會保存他們的客戶端ID到我自己的對象在內存中,直到斷開連接? – fancy 2011-05-11 20:28:06

+0

不知道您的要求,很難回答您的問題。對用戶進行「分組」的一種可能方式可能是將標籤添加到用戶的記錄中,以指示一個或多個組中的成員身份,當用戶希望與其他組成員通信時可以使用該組。這可以很容易地與Redis的pub/sub功能相結合來處理羣組間消息。 – 2011-05-12 16:53:29

1

剛剛找到最終的解決方案在這裏:http://www.danielbaulig.de/socket-ioexpress/

它說明了如何使用會話無論是明示或node.js中 而且你可以使用redisStore進行永久會話(理想情況下,每分鐘重啓服務器3次:))

+1

雖然這可能在理論上回答這個問題,但最好在這裏包含答案的基本部分,並提供供參考的鏈接。 – 2012-01-04 13:05:17