我正在尝试在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吗?
在将内容推送到自定义对象之前,如何保持会话/检查会话的有效性?有没有人遇到过类似的问题?
由于 彼得
答案 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));
}
});
}