У меня есть функция в моем облачном коде, которая работает, но я не уверен, как исправить проблему, связанную с ней.Ошибка облачного кода при сохранении пользователя
Оригинал Проблема:
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.
Log выходного файла:
Inside assignTokenToUser
success...
^[[32minfo^[[39m: Ran cloud function assignTokenToUser for user undefined with:
Input: {"email":"[email protected]"}
Result: "p66qm34jd80p0j6ne03fe1q7f" functionName=assignTokenToUser, [email protected], user=undefined
going to send an email... with result: p66qm34jd80p0j6ne03fe1q7f
fullLink: https://beatthegym.com/[email protected]&token=p66qm34jd80p0j6ne03fe1q7f
^[[31merror^[[39m: Error generating response. ParseError { code: 206, message: 'Cannot modify user 4m0VZFsKVt.' } code=206, message=Cannot modify user 4m0VZFsKVt.
[object Object]
Так что я пошел на, чтобы изменить свой код на следующее:
Код:
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) {
console.log("inside query.find...");
query.first(null, { useMasterKey: true }).then(function(user) {
console.log("inside query.first...");
// Successfully retrieved the object.
user.set("emailToken", token);
user.save(null, { useMasterKey: true }).then(function() {
console.log("inside user.save...");
response.success();
}, function(error) {
response.error(error);
});
response.success(token);
},
function(error) {
console.log("error 1...");
response.error(error);
});
}, function(error) {
console.log("error 2...");
response.error(error);
});
});
Файл журнала:
Inside assignTokenToUser
inside query.find...
inside query.first...
^[[32minfo^[[39m: Ran cloud function assignTokenToUser for user undefined with:
Input: {"email":"[email protected]"}
Result: "tqc8m9lo2tcsrqn69c3q0e1q7f" functionName=assignTokenToUser, [email protected], user=undefined
inside user.save...
^[[32minfo^[[39m: Ran cloud function assignTokenToUser for user undefined with:
Input: {"email":"[email protected]"}
Result: undefined functionName=assignTokenToUser, [email protected], user=undefined
[object Object]
Теперь файл журнала дает s я пользователь как «undefined», и вызов функции дает мне ожидающий статус на вкладке «Сеть Chrome» в инструменте «Инспектор», пока он не превратится в 502, а затем запрос будет автоматически сгенерирован браузером. Все остальные запросы получают правильный ответ 200.
Однако данные, по-видимому, сохраняются .. запись против этого адреса электронной почты сохраняет корректно генерируемый токен. Но запрос из браузера терпит неудачу, и пользователь «не определен» в исходном файле журнала, я вижу правильный идентификатор пользователя ... каждый раз, когда он терпит неудачу, функция автоматически запускается снова (поскольку браузер генерирует другой запрос каждый раз, когда он получает 502) и так как он фактически должен отправить по электронной почте, он снова и снова работает продолжает генерировать infinate писем ...
Спасибо заранее ..
не могли бы вы опубликовать обновленный код? Я борюсь с той же проблемой. – a4arpan
Обновленный код - это второй фрагмент кода, который я его поместил - он отлично работает, то есть он будет активно обновлять запись, даже если пользователь не войдет в систему, и поэтому он показывает, что пользователь «undefined» в файле журнала. Если вы хотите, чтобы часть кода обновляла зарегистрированного пользователя, вам необходимо использовать метод current(). – Meeyam