使用云代码和PFFacebookUtils覆盖电子邮件/用户名

Overriding Email/Username with Cloud Code and PFFacebookUtils

本文关键字:电子邮件 用户 覆盖 PFFacebookUtils 代码      更新时间:2023-09-26

在使用Parse服务时,我试图允许用户通过Facebook登录应用程序并使用Facebook信息填写字段来跳过登录字段。我正在使用 Parse 的云代码来使 swift 客户端代码尽可能简单。但是,在尝试使用云代码设置Parse.User的用户名和电子邮件地址字段时,我得到了Parse.Cloud的一点回话。在应用程序内运行它时,我收到以下错误。

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

[斯威夫特代码]

@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()时引起的,在这种情况下这似乎不是问题。

非常感谢。

似乎

usernameemail不能在触发器beforeSave更改,因为它们应该是唯一的

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

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

相关文章: