从 Parse 迁移时,不再有“当前用户”的概念受限于每个 Cloud Code 请求。在说明中写道,如果您的代码使用 Parse.User.current(),则应改用 request.user(请参阅下面的说明,从https://github.com/ParsePlatform/parse-server/wiki/复制粘贴与托管解析的兼容性)
对于 android,我当前使用 ParseUser.getCurrentUser() 来检查用户是否登录 if (!ParseAnonymousUtils.isLinked(ParseUser.getCurrentUser()))。我如何需要重写它以便在从 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() 无法识别。如果您将 Parse.User.current() 替换为 request.user,该函数将成功运行,但您可能仍然会发现它根本没有返回任何消息。这是因为 query.find() 不再在 request.user 范围内运行,因此它只会返回公开可读的对象。
要在 Cloud Code 中以特定用户的身份进行查询和写入,您需要将用户的 sessionToken 作为选项传递。发出请求的经过身份验证的用户的会话令牌在 request.user.getSessionToken() 中可用。
移植的 Cloud 函数现在看起来像这样:
// 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);
});
});
苏珊娜