如何 运行 Cloud Code 作为特定用户运行
How to run Cloud Code functions as a particular user
我的 Parse 服务器中有一些数据对每个用户都是私有的,所以当我创建对象时,我给了它们一个 ACL,只为创建它们的用户提供读写访问权限。
我现在正在将 reads/writes 到数据库的一些代码移动到云代码,我注意到查询不再 return 使用这些 ACL 结果。传递给云代码函数的 request.user 参数设置为登录用户,因此我假设云代码函数 运行ning 作为该用户,但事实似乎并非如此。
我可以 运行 使用主密钥进行查询,但我更愿意 运行 作为当前用户,这样该功能就不会意外地弄乱其他用户的数据。相反,我传递了会话令牌:
let options = { sessionToken: request.headers['x-parse-session-token'] };
new Parse.Query('MyClass').find(options);
可行,但看起来很复杂。这是最好的方法吗?
你是对的...
当您在云中执行任何 CRUD 操作时,您必须传递登录的用户会话令牌(如果此对象受 ACL 保护)。为此,您需要从用户对象获取 sessionToken 并将其作为参数传递给您正在执行的函数。所以在你的云代码中你应该做这样的事情:
var query = new Parse.Query("MyQuery");
query.find({
sessionToken: request.user.get("sessionToken")
}).then(results => {
});
在上面的代码中,我将当前登录用户的会话令牌传递给查询。保存对象或删除对象时也可以这样做...
我的 Parse 服务器中有一些数据对每个用户都是私有的,所以当我创建对象时,我给了它们一个 ACL,只为创建它们的用户提供读写访问权限。
我现在正在将 reads/writes 到数据库的一些代码移动到云代码,我注意到查询不再 return 使用这些 ACL 结果。传递给云代码函数的 request.user 参数设置为登录用户,因此我假设云代码函数 运行ning 作为该用户,但事实似乎并非如此。
我可以 运行 使用主密钥进行查询,但我更愿意 运行 作为当前用户,这样该功能就不会意外地弄乱其他用户的数据。相反,我传递了会话令牌:
let options = { sessionToken: request.headers['x-parse-session-token'] };
new Parse.Query('MyClass').find(options);
可行,但看起来很复杂。这是最好的方法吗?
你是对的...
当您在云中执行任何 CRUD 操作时,您必须传递登录的用户会话令牌(如果此对象受 ACL 保护)。为此,您需要从用户对象获取 sessionToken 并将其作为参数传递给您正在执行的函数。所以在你的云代码中你应该做这样的事情:
var query = new Parse.Query("MyQuery");
query.find({
sessionToken: request.user.get("sessionToken")
}).then(results => {
});
在上面的代码中,我将当前登录用户的会话令牌传递给查询。保存对象或删除对象时也可以这样做...