2013-09-28 27 views
1

我使用keepalive方法跟蹤我在流星應用程序中登錄的用戶,每個登錄用戶每5秒呼叫一次。防止在流星中使用相同的用戶名重複登錄

它更新一個mongo集合,該集合使用「上次看到」時間戳保存用戶標識。

直到我已經更新流星0.6.5,以防止有人使用登錄一個已經登錄的用戶名我已經添加以下代碼password_server.js文件中account-password pacakge:

var alreadyConnected=false; 
    Meteor.call("isUserConnected", user._id, function(err, result) { 
     alreadyConnected=result; 
    }); 
if(alreadyConnected)throw new Meteor.Error(403, "User Already Connected"); 

右後:

var user = Meteor.users.findOne(selector); 
    if (!user) 
    throw new Meteor.Error(403, "User not found"); 

* isUserConnected是我在來檢查,如果用戶發送了確認信號,過去5秒服務器代碼創建了一個方法..

更新後,它停止工作,我不再知道如何編輯軟件包文件。

回答

0

使用Keepalive來跟蹤用戶是否連接效率不高。你可以使用我的用戶狀態包,這使連接插座的軌道,例如:

https://github.com/mizzao/meteor-user-status

其次,允許客戶做出的他是否應該或不應該是確定允許連接是不安全的(除其他外,導致延遲,並要求所有用戶發佈到客戶端)。您應該通過在服務器端添加一個新的登錄處理程序來檢查用戶名,如果這樣的用戶是已經連接,並且如果是的話拒絕登錄。請參見下面的包如何定義新的登錄處理,並從客戶端調用它們:

https://github.com/mizzao/meteor-accounts-testing

0

使用流星帳戶,你可以使用他們的官方logoutotherclients方法

註銷其他客戶端以當前用戶身份登錄,但不會在調用此函數的客戶端中登錄 。

例如,在用戶的瀏覽器調用時,在該瀏覽器的連接一直保持登錄狀態,但是任何其他瀏覽器或客戶DDP登錄的用戶將被註銷。

請注意:必須從客戶端調用,如果您需要更強大的服務器端進行處理,則由客戶端調用。

相關問題