0

我正在尝试在 Appcelerator ACS 的自定义对象上存储一些数据。所以会有一个服务来做到这一点。每次需要身份验证来创建一个新对象

但是我在使用 ACS 登录时有时会遇到错误。但它并不总是发生。只有当我多次致电服务时。

我得到的错误是:

{ 成功:假,错误:真,代码:400,消息:“发送的请求无效。” }

用于登录的代码:

ACS.Users.login(userData, function(data){
    if(data.success) {
        console.log("----------Successful to login.---------------");
        console.log(data);
        res.send(data);
        res.end();

    } else {
        console.log("------------------login failed---------------");
        console.log(data);
        res.send(data);
        res.end();
    }
},req, res);

有人可以帮助我了解如何从 node.ACS Web 服务应用程序(不是 Web 应用程序)重用会话 ID 吗?

在将某些内容推送到自定义对象之前,我如何保持会话/检查会话有效性?有没有人遇到过类似的问题?

谢谢彼得

4

2 回答 2

3

由于您将 req 和 res 参数传入 ACS.Users.login,因此会话保存在 _session_id cookie 中:

http://docs.appcelerator.com/cloud/latest/#!/guide/node_acs

当您对 ACS 进行后续调用时,您传入 req 和 res 参数,它将检查此会话令牌。

会话在超时或注销后可能会失效。要检查会话是否仍然良好,一种方法是检查此 REST API 端点 (GET):

https://api.cloud.appcelerator.com/v1/users/show/me.json?key= (您的 ACS 密钥)&_session_id=(用户的会话 ID)

此外,出于某种原因,acs-node v0.9.3 似乎返回相同的会话 ID,即使对于不同的用户也是如此。我见过的一些副作用包括 (1) 错误的用户试图更改对象,以及 (2) 一个用户创建的对象实际上归最后一个登录的人所有。确保 acs-node 是v0.9.2 避免了这个问题。

于 2014-12-09T02:06:14.313 回答
0

现在node-acs 已经关闭,每个人都必须迁移到新的arrowdb节点 sdk。

为了解决上面关于不验证用户的问题,在每次 ArrowDB 调用之前,请确保传递用户的 session_id,如下所示:

// Connect Node.ACS to existing ACS
var ArrowDB = require('arrowdb'),
    arrowDBApp = new ArrowDB('XXYYZZZ', { // ArrowDB Key
        apiEntryPoint: 'https://api.cloud.appcelerator.com',
        autoSessionManagement: false, // handle session_id yourself
        prettyJson: true,
        responseJsonDepth: 3
    }); 

// == Creates the ACS_Event for a logged in User on ArrowDB ==
function createACSEvent(uniqueId, params) {
    arrowDBApp.sessionCookieString = params.session_id; //<-- THIS IS IT!
    arrowDBApp.eventsCreate({
        name: 'someEvent',
        start_time: params.start_time,
        custom_fields: params,
    }, function(err, result) {
        if (err) {
            logger.info( 'ERROR ACS_Event created '+ err);
        } else {
            logger.info( 'Success Creating ACSEvent ' + JSON.stringify(result));
        }
    });
}
于 2016-10-15T13:01:58.067 回答