我正在尝试保存用户(从Facebook中提取一些数据并将其添加到某些列,其中没有与Parse用户名相关)在Parse的beforeSave
触发器中云,但我在注册时在我的iOS应用程序中收到以下错误:
Can't modify username in the before save trigger
这是非常自我解释的,对吧?只是因为我不在任何地方修改用户名这一事实,无论是在我的iOS应用程序中的触发器,云功能还是客户端。我甚至没有访问或使用它。使用我的云代码添加字段成功创建了用户。但有时我只是得到这个错误:
Validation Failed
然后,我的用户对象似乎没有保存。两个错误都是随机发生的,我的测试用户是相同的。我甚至在整个项目中搜索了“用户名”这个词,以确保我没有直接或间接地将它设置在某处。我不是在任何地方保存它。这是一个Parse bug,还是我错过了一些明显的东西?这是我的完整代码:
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();
}
});
答案 0 :(得分:1)
可能的问题是您试图在beforeSave
触发器中保存对象;你不需要保存它,你只需要修改它然后调用response.success()
让Parse.com知道继续保存操作。你得到的错误可能是因为它试图创建两次相同的用户 - 尽管这只是猜测。
有关详细信息,请参阅https://parse.com/docs/cloud_code_guide?language=JavaScript#functions-onsave。
删除user.save()
来电,然后致电response.success()
。