我正在尝试在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);
有人可以帮助我了解如何从节点重用会话 ID。ACS 网络服务应用程序(不是网络应用程序)?
如何在将某些内容推送到自定义对象之前保持会话/检查会话有效性?有没有人遇到过类似的问题?
谢谢彼得
由于您正在将 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 节点位于 v0.9.2 可避免此问题。
现在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));
}
});
}