2014-12-25 2 views
2

Parse 서비스를 활용하면서 사용자가 Facebook을 통해 앱에 로그인하고 Facebook 정보를 사용하여 입력란을 채우도록 허용하려고했습니다. Parse 's Cloud Code를 사용하여 클라이언트 쪽 코드를 가능한 간단하게 만듭니다. 그러나 구름 코드를 사용하여 Username 및 Email Address 필드를 Parse.User으로 설정하려고하면 Parse.Cloud에서 약간의 대화가 나옵니다. 인앱에서 실행할 때 다음과 같은 오류가 발생합니다. 사용자 이름 기능을 제거 할 때클라우드 코드 및 PFFacebookUtils로 이메일/사용자 이름 재정의

[Error]: Can't modify username in the before save trigger (Code: 141, Version: 1.6.1) 

는, 나는 나타납니다

[Error]: Can't modify email in the before save trigger (Code: 141, Version: 1.6.1) 

을 동일한 코드를 통해, 나는 또한 같은 방법을 사용하여 오류없이 firstNamelastName을 설정하고있다. 아래는 사용 된 코드입니다.

[CLOUD CODE]

function pad(num, size){ return ('000000000' + num).substr(-size); } 

Parse.Cloud.beforeSave(Parse.User, function (request, response) { 
    var token = request.object.get("authData").facebook.access_token 
    Parse.Cloud.httpRequest({ 
     url: 'https://graph.facebook.com/v2.1/me?fields=first_name,last_name,email&access_token=' + token, 
     success: function(httpResponse) { 
      var responseData = httpResponse.data; 

      request.object.set("email", responseData.email) // <- Error Occurs Here 
      request.object.set("username", responseData.email.split("@")[0].concat(".", pad(Math.floor(Math.random()*10000),4))) // <- Error Occurs Here 
      request.object.set("firstName", responseData.first_name) 
      request.object.set("lastName", responseData.last_name) 

      response.success() 
     }, 
     error: function(){ 
      response.error("Something went wrong.") 
     } 
    }) 
}) 

[SWIFT CODE] 내가 만난 여기

@IBAction func loginWithFacebookButtonAction(sender: AnyObject){ 
    loginWithFacebookButtonOutlet.setTitle("Logging In...", forState: UIControlState.Normal) 
    let permissions = ["public_profile", "user_friends", "email"] 
    PFFacebookUtils.logInWithPermissions(permissions, { 
     (user: PFUser!, error: NSError!) -> Void in 
     if user == nil { 
      println("Uh oh. The user cancelled the Facebook login.") 
     } else if user.isNew { 
      println("User signed up and logged in through Facebook!") 
      self.performSegueWithIdentifier("facebookToApp", sender: self) 
     } else { 
      println("User logged in through Facebook!") 
      self.performSegueWithIdentifier("facebookToApp", sender: self) 
     } 
    }) 
} 

다른 문제가 발생하는 사용자는하지 않는 대신 response.success().save()를 사용하려고 할 때 이 상황에서 문제가되는 것 같습니다.

감사합니다.

+1

내가 같은 문제가, 당신이 되었나요? –

+1

필자는 문제를 제거하고 입력의 무결성을 보장하기 위해 구문 분석이 하드 코딩 된 예방 조치라고 가정합니다. – schrismartin

+0

@ChrisMartin 문제를 해결함으로써 문제를 해결할 수 없었습니까? 어떻게하면 그렇게 했습니까? – fatuhoku

답변

2

는 그들이이 필드가 고유해야하기 때문에

는 지금, 이메일 필드가를 BeforeSave에 수정할 수 없습니다 고유해야합니다으로 username & emailbeforeSave 트리거에서 변경 될 수없는 것 같다. 다른 사용자가 이미 사용하고있는 값을 사용하면 beforeSave 메소드가 처리 할 수없는 오류가 발생합니다.

참조가 : 그것은 해결 https://www.parse.com/questions/why-cant-i-modify-the-email-field-in-a-before-save-trigger

+0

그러면 가입/로그인시 Facebook 전자 메일 및 사용자 이름을 검색하는 가장 좋은 방법은 무엇입니까? 현재 내가 볼 수있는 유일한 방법은 사용자가 로그인 할 때마다 클라이언트 측에서이 작업을 수행하는 것입니다. 즉, Cloud Code Function/Job 대 'beforeSave' /'afterSave' 후크를 사용하여 오류를 피하십시오. – fatuhoku

+0

'email' 필드는 프로그래밍 방식으로 수정할 수 없다는 것을 알게되었습니다 (즉, Parse JS SDK를 사용하여 노드 환경에서 스크립트를 실행합니다.) 실제로 실망 스럽습니다. – fatuhoku

관련 문제