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 关注
- 503 浏览
添加回答
举报
0/150
提交
取消