使用Cloud Code和PFFacebookUtils覆盖电子邮件/用户名

时间:2014-12-25 00:25:07

标签: javascript ios facebook-graph-api parse-platform cloud-code

在使用Parse服务时,我试图允许用户通过Facebook登录应用程序并使用Facebook信息填写字段来跳过登录字段。我正在使用Parse的Cloud Code使swift的客户端代码尽可能简单。但是,当我尝试使用云代码设置Parse.Cloud的用户名和电子邮件地址字段时,我会从Parse.User进行一些反馈。在应用程序中运行时出现以下错误。

[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而没有任何错误。以下是使用的代码。

[云代码]

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 个答案:

答案 0 :(得分:2)

似乎是username&amp; email触发器无法更改beforeSave,因为它们应该是唯一的

  

目前,无法在beforeSave上修改电子邮件字段,因为此字段应该是唯一的。如果您要使用其他用户已在使用的值,则会导致您的beforeSave方法无法处理的错误。

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