我正在尝试在云中的 Parse 触发器中保存用户(从 Facebook 提取一些数据并将其添加到与 Parse 用户名无关beforeSave
的某些列) ,但是我的 iOS 应用程序出现以下错误注册:
Can't modify username in the before save trigger
这很不言自明,对吧?只是我不会在任何地方修改用户名,无论是在触发器、云功能还是在我的 iOS 应用程序的客户端。我什至不访问或使用它。不过,使用我的云代码添加字段成功创建了用户。但有时我只是得到这个错误:
Validation Failed
然后,我的用户对象似乎没有保存。这两个错误都是随机发生的,我的测试用户相同。我什至在整个项目中搜索了“用户名”这个词,以确保我没有直接或间接地将它设置在某个地方。我不会把它保存在任何地方。这是 Parse 错误,还是我遗漏了一些明显的东西?这是我的完整代码:
Parse.Cloud.beforeSave(User, function(request, response) {
var user = request.object;
if(typeof user.get("nickname") == "undefined" || user.get("nickname") == null){
var randomNick = "User " + Math.floor(Math.random() * 1000000);
user.set("nickname", randomNick);
}
if(user.get("facebookId") == undefined){
var token = user.get('authData')['facebook']['access_token'];
Parse.Cloud.httpRequest({
url: 'https://graph.facebook.com/v2.1/me?fields=id,gender,name&access_token=' + token,
success: function(httpResponse) {
var responseData = httpResponse.data;
user.set("facebookId", responseData.id);
user.set("realName", responseData.name);
if(responseData.gender !== undefined){
user.set("gender", responseData.gender);
}
var acl = new Parse.ACL();
acl.setPublicReadAccess(false);
user.setACL(acl);
user.save(null, {
useMasterKey:true,
success: function(){response.success()},
error: function(o,e){response.error("error: " + e)}
});
},
error: function(httpResponse) {
console.error('Request failed with response code ' + httpResponse.status);
}
});
}else{
response.success();
}
});