在使用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)
通过相同的代码,我还使用相同的方法设置firstName
和lastName
而没有任何错误。以下是使用的代码。
[云代码]
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()
时导致的,这在这种情况下似乎不是问题。
非常感谢。
答案 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