Firebase Android:使用户名唯一解析将在年底关闭,所以我决定开始使用Firebase。我需要实现一个注册过程的三个字段:电子邮件,用户名,密码(电子邮件和用户名对我的应用程序来说一定是独一无二的)。由于Firebase并不提供像Parse这样的管理用户名的简单方法,所以我决定只使用电子邮件/密码注册,并保存一些额外的数据,比如用户名。以下是我的用户数据结构:app : {
users: {
"some-user-uid": {
email: "test@test.com"
username: "myname"
}
}}但是,我想做的是使用户名唯一,并在创建帐户之前检查它。以下是我的规则:{
"rules": {
".read": true,
".write": true,
"users": {
"$uid": {
".write": "auth !== null && auth.uid === $uid",
".read": "auth !== null && auth.provider === 'password'",
"username": {".validate": "!root.child('users').child(newData.child('username').val()).exists()"}
}
}
}}非常感谢你的帮助
3 回答
拉丁的传说
TA贡献1789条经验 获得超8个赞
app : {
users: {
"some-user-uid": {
email: "test@test.com"
username: "myname"
}
},
usernames: {
"myname": "some-user-uid"
}}usernames
"users": {
"$uid": {
".write": "auth !== null && auth.uid === $uid",
".read": "auth !== null && auth.provider === 'password'",
"username": {
".validate": "
!root.child('usernames').child(newData.val()).exists() ||
root.child('usernames').child(newData.val()).val() == $uid"
}
}}
慕码人8056858
TA贡献1803条经验 获得超6个赞
firebaseRef.child("usernames").child(username).runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
if (mutableData.getValue() == null) {
mutableData.setValue(authData.getUid());
return Transaction.success(mutableData);
}
return Transaction.abort();
}
@Override
public void onComplete(FirebaseError firebaseError, boolean commited, DataSnapshot dataSnapshot) {
if (commited) {
// username saved
} else {
// username exists
}
}});- 3 回答
- 0 关注
- 545 浏览
添加回答
举报
0/150
提交
取消
