클라우드 코드에 작동하는 기능이 있지만 관련 문제를 해결하는 방법을 모르겠습니다.클라우드 코드 오류로 사용자 저장
원래 문제 :
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 우리가 쿼리 개체를 사용할 때마다 전달 될 필요가 있다는 점이다. 그에 상응하여, 내 로그 파일은 사용자를 저장하려고 할 때 Code 206 오류를 표시합니다.로그 파일 출력 :
코드 :
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]
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]
그래서 나는 다음에 코드를 변경했다 이제 로그 파일에 나에게 사용자가 '정의되지 않음'으로 표시되고 502에 도달 할 때까지 Inspector 도구의 Chrome 네트워크 탭에 함수 호출이 보류 중 상태가되고 브라우저에서 요청을 자동으로 다시 생성합니다. 다른 모든 요청은 올바른 200 응답을받습니다.
그러나 데이터가 저장되어있는 것 같습니다.이 전자 메일 주소에 대한 레코드는 올바르게 생성 된 토큰을 저장합니다. 그러나 브라우저에서 요청이 실패하고 사용자가 "정의되지 않음"동안 원래 로그 파일에서 올바른 사용자 ID를 볼 수 있습니다 ... 실패 할 때마다 브라우저가 자동으로 다시 실행됩니다 (브라우저가 가져올 때마다 다른 요청을 생성하기 때문에). 이 실제로 이메일을 보내하도록되어 있기 때문에 502)와,
업데이트 된 코드를 게시 할 수 있습니까? 나는 같은 문제로 고민하고있다 – a4arpan
업데이트 된 코드는 내가 넣은 코드의 두 번째 덩어리 다. 사용자가 로그인하지 않아도 강제로 레코드를 강제 업데이트한다. "정의되지 않은"로그 파일. 로그인 한 사용자를 업데이트하는 코드가 필요한 경우 current() 메서드를 사용해야합니다. – Meeyam