【发布时间】:2014-10-07 07:17:26
【问题描述】:
我正在使用FirebaseSimpleLogin 创建用户并处理身份验证。
当我尝试通过 $createUser() 方法通过简单登录创建新用户时,如果电子邮件地址已被使用,则 firebase 不会创建用户。但是,我还使用$set() 在创建用户后将其保存到我的firebase,并且我使用user.uid 作为密钥。当尝试写入数据库时,即使用户名不是唯一的,firebase 也会保存记录,因为简单登录只需要电子邮件和密码。那么,当用户名不被用作用户对象的键时,如何验证用户名是唯一的呢?
我正在创建这样的新用户:
$scope.createUser = function() {
$scope.auth.$createUser('trinker@gmail.com', 'password').then(function(user, err) {
if (!err) {
ref.child('users/' + user.uid).set({
email: user.email,
username: user.username
});
console.log("success!");
}else{
console.log(err.message);
}
});
}
我的用户对象如下所示:
{
"users" : {
"simplelogin:28" : {
"email" : "trinker@gmail.com",
"username" : "jtrinker"
},
"simplelogin:30" : {
"email" : "test@gmail.com",
"username" : "jtrinker"
}
}
}
}
我需要使用 uid 作为每个用户的键,但我仍然需要用户名是唯一的。
如果一个对象中的属性不是另一个对象中的属性所独有的,我该如何防止 firebase 保存记录?
【问题讨论】:
-
如果他们没有成功创建帐户,为什么要写用户记录?为什么未经身份验证的用户会写入记录?您能否详细说明为什么这是一个好主意?
-
我想我不清楚。正如您明确暗示的那样,显然未经身份验证的用户写入记录是一个非常糟糕的主意。然而,这不是重点。关键是,由于创建用户帐户不需要用户名,我如何确保我的 firebase 中没有重复的用户名?
-
您的问题询问如何使电子邮件地址独一无二。如果电子邮件地址已被占用,他们将无法创建帐户,因此无法进行身份验证,这将阻止为重复的电子邮件地址创建用户帐户。所以我仍然没有完全掌握我们试图解决的更大的用例。
-
我很抱歉造成混乱。在我的问题结束时,我提到我还需要用户拥有一个用户名,该用户名也需要是唯一的。是的,所有电子邮件地址都是唯一的,因为如果电子邮件已经被接收,他们将无法创建帐户,但是,firebase 简单登录不需要用户名,因此有人可以使用唯一的电子邮件创建新用户地址但输入重复的用户名。我想在上面的用户对象中添加一个用户名键,但我需要确保你不能写给用户,除非用户名在我的 firebase 的所有用户中也是唯一的。
-
我编辑了我的问题希望更清楚。
标签: angularjs firebase firebase-realtime-database angularfire firebase-security