Parse platform 保存用户时出现云代码错误
我的云代码中有一个函数,可以工作,但我不确定如何解决与此相关的问题 原始问题:Parse platform 保存用户时出现云代码错误,parse-platform,Parse Platform,我的云代码中有一个函数,可以工作,但我不确定如何解决与此相关的问题 原始问题: Parse.Cloud.define("assignTokenToUser", function(request, response) { console.log("Inside assignTokenToUser"); var token = Math.random().toString(30).substring(7); query = new Parse.Query("User"),
Parse.Cloud.define("assignTokenToUser", function(request, response) {
console.log("Inside assignTokenToUser");
var token = Math.random().toString(30).substring(7);
query = new Parse.Query("User"),
email = request.params.email;
query.equalTo("username", email);
query.find({ useMasterKey: true }).then(function(results) {
query.first({
success: function(user) {
// Successfully retrieved the object.
user.set("emailToken", token);
user.save();
console.log("success...");
response.success(token);
},
error: function(error) {
console.log("error 1...");
response.error(error);
}
});
}, function(error) {
console.log("error 2...");
response.error(error);
});
});
这似乎是扫描互联网后的常见问题,我的分析是每次使用查询对象时都需要传递useMasterKey。相应地,我的日志文件显示,当试图保存用户时,它给出了一个代码206错误
日志文件输出:
Inside assignTokenToUser
success...
^[[32minfo^[[39m: Ran cloud function assignTokenToUser for user undefined with:
Input: {"email":"maryam.zafar@emumba.com"}
Result: "p66qm34jd80p0j6ne03fe1q7f" functionName=assignTokenToUser, email=maryam.zafar@emumba.com, user=undefined
going to send an email... with result: p66qm34jd80p0j6ne03fe1q7f
fullLink: https://beatthegym.com/emailVerified?username=maryam.zafar@emumba.com&token=p66qm34jd80p0j6ne03fe1q7f
^[[31merror^[[39m: Error generating response. ParseError { code: 206, message: 'Cannot modify user 4m0VZFsKVt.' } code=206, message=Cannot modify user 4m0VZFsKVt.
[object Object]
因此,我继续将代码更改为:
代码:
日志文件:
Inside assignTokenToUser
inside query.find...
inside query.first...
^[[32minfo^[[39m: Ran cloud function assignTokenToUser for user undefined with:
Input: {"email":"maryam.zafar@emumba.com"}
Result: "tqc8m9lo2tcsrqn69c3q0e1q7f" functionName=assignTokenToUser, email=maryam.zafar@emumba.com, user=undefined
inside user.save...
^[[32minfo^[[39m: Ran cloud function assignTokenToUser for user undefined with:
Input: {"email":"maryam.zafar@emumba.com"}
Result: undefined functionName=assignTokenToUser, email=maryam.zafar@emumba.com, user=undefined
[object Object]
现在,日志文件给了我一个“未定义”的用户,对该函数的调用在Inspector工具的Chrome网络选项卡中给了我一个挂起状态,直到它变成502,然后浏览器再次自动生成请求。所有其他请求都会得到正确的200响应
但是,数据似乎已保存。。此电子邮件地址的记录将正确保存生成的令牌。但来自浏览器的请求失败,用户“未定义”,而在原始日志文件中,我看到了正确的用户Id。。。每次失败时,该功能都会自动再次运行(因为浏览器每次收到502时都会生成另一个请求),而且由于它实际上应该发送电子邮件,因此它会一次又一次地运行,并不断生成内部电子邮件
提前感谢..终于明白了这一点:
在我使用Parse.user.current()方法获取该用户之前,该用户将保持未定义状态。数据确实会保存到数据库中,因为它是对记录的强制更新,但是在使用current()方法对用户进行身份验证之前,它将保持未定义状态。我看到这是一篇旧文章,但我在代码中发现了明显的错误:
query = new Parse.Query("User")
应该是:
query = new Parse.Query(Parse.User)
或者至少:
query = new Parse.Query("_User")
因为
User
是解析中预定义的类。您能发布更新的代码吗?我正在与同样的问题作斗争更新的代码是我放在它上面的第二块代码-它工作正常,即即使用户未登录,它也会强制更新记录,这就是为什么它在日志文件中显示用户“未定义”。如果希望有一段代码更新登录用户,则需要使用current()方法。
query = new Parse.Query("_User")