从Parse迁移时,不再存在限制每个Cloud Code请求的“当前用户”的概念。在说明中写道,如果你的代码使用Parse.User.current(),你应该使用request.user(参见下面的说明,从https://github.com/ParsePlatform/parse-server/wiki/Compatibility-with-Hosted-Parse粘贴的复制品)
对于android我当前正在使用ParseUser.getCurrentUser()来检查用户是否登录if(!ParseAnonymousUtils.isLinked(ParseUser.getCurrentUser()))。 我如何重写这个以便在从Parse迁移后才能工作?我是初学者,所以我非常感谢能得到的所有帮助。
有关PARSE地点的资料: 没有当前用户
现在,每个Cloud Code请求都由同一个Parse Server实例处理,因此不再存在限制每个Cloud Code请求的“当前用户”的概念。如果您的代码使用Parse.User.current(),则应使用request.user。如果您的Cloud功能依赖于在发出Cloud Code请求的用户范围内执行的查询和其他操作,则需要将用户的sessionToken作为参数传递给相关操作。
考虑一个消息传递应用程序,其中每个Message对象都设置了一个ACL,该ACL仅提供对有限的一组用户的读取权限,比如消息的作者和收件人。要获取发送给当前用户的所有消息,您可能具有与此类似的云功能:
// Parse.com Cloud Code
Parse.Cloud.define('getMessagesForUser', function(request, response) {
var user = Parse.User.current();
var query = new Parse.Query('Messages');
query.equalTo('recipient', user);
query.find()
.then(function(messages) {
response.success(messages);
});
});
如果此函数未经任何修改移植到Parse Server,您将首先注意到您的函数无法运行,因为无法识别Parse.User.current()。如果用request.user替换Parse.User.current(),该函数将成功运行,但您可能仍然发现它根本没有返回任何消息。这是因为query.find()不再在request.user范围内运行,因此它只返回公开可读的对象。
要在Cloud Code中作为特定用户进行查询和写入,您需要将用户的sessionToken作为选项传递。发出请求的经过身份验证的用户的会话令牌在request.user.getSessionToken()中可用。
移植的云功能现在看起来像这样:
// Parse Server Cloud Code
Parse.Cloud.define('getMessagesForUser', function(request, response) {
var user = request.user; // request.user replaces Parse.User.current()
var token = user.getSessionToken(); // get session token from request.user
var query = new Parse.Query('Messages');
query.equalTo('recipient', user);
query.find({ sessionToken: token }) // pass the session token to find()
.then(function(messages) {
response.success(messages);
});
});
BR 苏珊娜