2014-10-26 39 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