2017-02-13 3 views
2

У меня есть функция в моем облачном коде, которая работает, но я не уверен, как исправить проблему, связанную с ней.Ошибка облачного кода при сохранении пользователя

Оригинал Проблема:

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 писем ...

Спасибо заранее ..

ответ

0

Понял это, наконец:

пользователь останется неопределенным до тех пор, пока я не получу его, используя метод Parse.User.current(). Данные сохраняются в базе данных, поскольку это принудительное обновление записи, однако до тех пор, пока пользователь не будет удален с помощью метода current(), он останется неопределенным.

+0

не могли бы вы опубликовать обновленный код? Я борюсь с той же проблемой. – a4arpan

+1

Обновленный код - это второй фрагмент кода, который я его поместил - он отлично работает, то есть он будет активно обновлять запись, даже если пользователь не войдет в систему, и поэтому он показывает, что пользователь «undefined» в файле журнала. Если вы хотите, чтобы часть кода обновляла зарегистрированного пользователя, вам необходимо использовать метод current(). – Meeyam