使用云代码和PFFacebookUtils覆盖电子邮件/用户名
Overriding Email/Username with Cloud Code and PFFacebookUtils
在使用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)
通过相同的代码,我还使用相同的方法设置了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.")
}
})
})
[斯威夫特代码]
@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()
时引起的,在这种情况下这似乎不是问题。
非常感谢。
似乎
username
和email
不能在触发器beforeSave
更改,因为它们应该是唯一的
目前,无法在 beforeSave 上修改电子邮件字段,因为此字段应该是唯一的。如果要使用其他用户已在使用的值,这将导致 beforeSave 方法无法处理的错误。
参考: https://www.parse.com/questions/why-cant-i-modify-the-email-field-in-a-before-save-trigger
相关文章:
- 将用户制作的SVG(raphael.js)发送到服务器(php),以便通过电子邮件发送
- 根据部门用户的选择,接收来自多个电子邮件地址的Wordpress Contactform7查询
- Firebase电子邮件/密码创建用户安全
- 如何在不更改Javascript页面的情况下访问用户输入的电子邮件
- 如何设置30天的电子邮件验证以由用户重新发送
- 如何检查当前用户电子邮件是否已在客户端js文件中验证
- 将用户电子邮件输入字段复制到用户名字段中(去除包括“@”和之后的所有内容)
- 从用户id和电子邮件的.csv文件在facebook上发送好友请求
- 使用MeteorJS堆栈,如何检索用户's的电子邮件,其中包含他们发布的帖子中的userId
- 使用javascript SDK的Facebook用户电子邮件id
- 获取登录用户的电子邮件(Firebase安全规则)
- 如何确保唯一的电子邮件,用户名将使用Mongoose输入MongoDB
- 重定向“如果确认了电子邮件,则将用户重定向到登录页”
- 使用PHP和Javascript为每个用户电子邮件生成新的哈希
- 如何将用户输入的信息从网站直接发送到我的电子邮件中
- 检查数据库中是否存在用户的电子邮件
- 在 AJAX 中发送用户的相应电子邮件
- 从用户电子邮件创建哈希/令牌以进行电子邮件验证
- 在尝试检索经过身份验证的Google+用户的电子邮件地址时获取“gapi.client未定义”
- Phonegap插件:检索用户配置文件,电子邮件和Gmail