我的Parse服务器中有一些数据对每个用户都是私有的,所以当我创建对象时,我给了他们一个提供读取和读取的ACL。只对创建它们的用户进行写访问。
我现在将一些读/写数据库的代码移动到云代码,我注意到查询不再返回带有这些ACL的结果。传递给云代码函数的request.user参数设置为登录用户,因此我假设云代码函数作为该用户运行,但似乎并非如此。
我可以使用主密钥运行查询,但我更喜欢以当前用户身份运行,因此该功能无意中弄乱了其他用户的数据。而是我传递会话令牌:
let options = { sessionToken: request.headers['x-parse-session-token'] };
new Parse.Query('MyClass').find(options);
这有效,但似乎令人费解。这是最好的方式吗?
答案 0 :(得分:1)
在云中执行任何CRUD操作时,必须传递登录的用户会话令牌(如果此对象受ACL保护)。为此,您需要从用户对象获取 sessionToken ,并将其作为参数传递给您执行的函数。因此,在您的云代码中,您应该执行以下操作:
var query = new Parse.Query("MyQuery");
query.find({
sessionToken: request.user.get("sessionToken")
}).then(results => {
});
在上面的代码中,我将当前登录用户的会话令牌传递给查询。保存对象或删除对象时可以这样做......