2014-10-26 76 views
0

我試圖建立與parse.com一個簡單的應用程序,我的用戶管理驗證會話令牌時。意外行爲使用parse.com

我想從客戶端進行parse.com的登錄調用,並使用用戶的會話令牌(我將其添加爲cookie)調用我的node.js服務器。在服務器端,我將驗證會話(使用https://parse.com/docs/rest#users-validating)並僅在會話有效時允許訪問。

例如(在我的服務器):

app.get('/api', function(req, res, next) { 
    var token = getTokenFromRequest(req); 
    if(tokenIsValid(token)) { 
     next(); 
    } else { // Redirect... } 
}); 

app.get('/api/doSomething', function(req, res) { 
    // Do something.... 
}); 

然而,似乎REST API用戶驗證,使用戶返回即使用戶被註銷(有望重回「無效的會話」)。 這是REST API用戶驗證中的錯誤嗎?我究竟做錯了什麼?有沒有更好的方法來做到這一點?

謝謝!

+0

我看不到您的請求 – monkeyinsight 2014-10-26 16:36:35

+0

我想了解爲什麼REST對https://api.parse.com/1/users/me的調用返回用戶對象事件,如果用戶註銷.. .. – 2014-10-26 16:39:17

回答

0

通過REST沒有會話的概念真的。 REST調用意味着無狀態,這意味着/me的(當前)用戶將從所提供的令牌序列化。如果令牌關聯到用戶,它將返回該用戶的JSON表示,否則返回錯誤。 這種調用方式是異步的,所以你不能真正使用它和if語句。

你可以這樣做:

app.get('/api', function(req, res, next) { 
    var token = getTokenFromRequest(req); 
    serializeUserFromToken(token,function(err,parseResponse) { 
     if(err) return next(err) 
     if(parseResponse.code && parseResponse.code === 101){ 
      // called to parse succedded but the token is not valid 
      return next(parseResponse); 
     } 
     // parseResponse is the current User. 
     next(); 
    }); 
}); 

serializeUserFromToken使得以解析的請求與在X-Parse-Session-Token頭字段令牌。

+0

我同意!但是,如果用戶註銷,則serializeUserFromToken將返回序列化的用戶事件。我認爲它首先檢查會話是否已登錄或其他什麼... – 2014-10-26 16:43:08

+0

當您註銷當前用戶時,您需要清除會話中的cookie和令牌。對Parse的調用與你如何處理會話無關。 – Maroshii 2014-10-26 16:45:22

+0

Parse JS SDK將會話存儲在localStorage的前端,並且獨立於後端服務。而不是在前端登錄用戶,然後在後端登錄,那麼應該將它們登錄到後端,然後通過JS SDK的'become'方法將它們登錄到前端。看起來你分別在後端和前端處理登錄。看看這個:https://parse.com/docs/js_guide#users-become_anchor – Maroshii 2014-10-26 16:58:38