使用parse.com验证会话令牌时出现意外行为

时间:2014-10-26 16:21:11

标签: javascript node.js parse-platform

我正在尝试使用parse.com作为我的用户管理器构建一个简单的应用程序。

我想从我的客户端登录parse.com,并使用用户的会话令牌调用我的node.js服务器(我将其添加为cookie)。在服务器端,我将验证会话(使用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用户验证中的错误吗?我究竟做错了什么?有没有更好的方法呢?

谢谢!

1 个答案:

答案 0 :(得分: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标头字段中的令牌向解析发出请求的位置。