2017-02-13 2 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 우리가 쿼리 개체를 사용할 때마다 전달 될 필요가 있다는 점이다. 그에 상응하여, 내 로그 파일은 사용자를 저장하려고 할 때 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)와,

답변

0

이 마지막으로 이해 ..

가 사전에 감사합니다 ... 다시 다시 실행 infinate 이메일을 생성에 계속있어 :

사용자는 Parse.User.current() 메서드를 사용하여 얻을 때까지 정의되지 않은 상태로 유지됩니다. 데이터는 레코드에 대한 강제 업데이트이기 때문에 데이터베이스에 저장되지만 사용자가 current() 메서드를 사용하여 인증받지 않을 때까지는 정의되지 않은 상태로 유지됩니다.

+0

업데이트 된 코드를 게시 할 수 있습니까? 나는 같은 문제로 고민하고있다 – a4arpan

+1

업데이트 된 코드는 내가 넣은 코드의 두 번째 덩어리 다. 사용자가 로그인하지 않아도 강제로 레코드를 강제 업데이트한다. "정의되지 않은"로그 파일. 로그인 한 사용자를 업데이트하는 코드가 필요한 경우 current() 메서드를 사용해야합니다. – Meeyam

관련 문제