2014-12-25 51 views
2

使用Parse服務時,我試圖讓用戶通過Facebook登錄到應用程序並使用Facebook信息填寫字段來跳過登錄字段。我使用Parse的Cloud Code來儘可能簡化客戶端代碼。但是,當嘗試使用雲代碼設置Parse.User的用戶名和電子郵件地址字段時,我從Parse.Cloud得到了一點回響。運行它在應用程序中時出現以下錯誤。使用Cloud Code和PFFVideosUtils覆蓋電子郵件/用戶名

[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) 
     } 
    }) 
} 

其他問題所引起,當用戶試圖使用.save()代替response.success()這不似乎是這種情況下的問題。

非常感謝。

+1

我有同樣的問題,你把它解決了嗎? –

+1

我已經放棄了這個問題,並且假定它是一種硬編碼的預防措施,Parse使用它來保證輸入的完整性。 – schrismartin

+0

@ChrisMartin通過放棄問題,你是否意味着你只是沒有設法解決它?如果你解決了它,你是怎麼做到的? – fatuhoku

回答

2

似乎username & email不能beforeSave觸發而改變,因爲他們應該是唯一的

眼下,電子郵件字段不能在beforeSave修改,因爲這個領域應該是唯一的。如果您要使用其他用戶已使用的值,則會導致beforeSave方法無法處理的錯誤。

參考:https://www.parse.com/questions/why-cant-i-modify-the-email-field-in-a-before-save-trigger

+0

那麼在註冊/登錄時檢索Facebook電子郵件和用戶姓名的最佳方式是什麼?我現在看到的唯一方法就是在用戶登錄時從客戶端執行此操作。即,在雲代碼函數/作業中與'beforeSave' /'afterSave'掛鉤以避開錯誤。 – fatuhoku

+0

我發現'email'字段甚至無法以編程方式修改(即使用Parse JS SDK從Node環境運行腳本,實際上令人沮喪! – fatuhoku

相關問題