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

Unexpected behavior when validating a session token using parse.com

本文关键字:意外 令牌 parse com 验证 会话 使用      更新时间:2023-09-26

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

我想从客户端对parse.com进行登录调用,并使用用户的会话令牌调用node.js服务器(我会将其作为cookie添加)。在服务器端,我将验证会话(使用https://parse.com/docs/rest#users-验证),并且仅当会话有效时才允许访问。

例如(在我的服务器中):

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....
});
  • tokenIsValid(token)函数应使用https://parse.com/docs/rest#users-验证

然而,REST API用户验证似乎会返回用户,即使用户已注销(预计会返回"无效会话")。这是REST API用户验证中的一个错误吗?我做错了什么?有更好的方法吗?

谢谢!

通过REST,实际上没有会话的概念。REST调用是无状态的,这意味着/me的(当前)用户将从提供的令牌中序列化。如果令牌与用户相关联,它将返回该用户的JSON表示,否则将返回错误。无论如何,该调用是异步的,所以您不能在and 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请求Parse,并在X-Parse-Session-Token标头字段中使用令牌。