Appcelerator ACS.Users.login API使用消息获取错误代码400:'发送无效请求。'

时间:2014-12-02 17:12:36

标签: node.js appcelerator appcelerator-acs

我正在尝试在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网络服务应用程序(非网络应用程序)重新使用会话ID吗?

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

由于 彼得

2 个答案:

答案 0 :(得分: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=(YOUR ACS KEY)& _session_id =(用户的会话ID)

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

答案 1 :(得分: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));
        }
    });
}