如何防止用户名在Firebase中重复注册?
我想防止重复的用户名,而signUpforms的用户input。 我已经创build了电子邮件login像下面,呃创build用户,然后用用户字典授权setValue。
但是,我使用Firebase安全设置进行堆叠,以及如何检查处理这种情况。
REF_BASE.createUser(email, password: pwd, withValueCompletionBlock: { .. REF_BASE.authUser(email, password: pwd, withCompletionBlock: { .. REF_USERS.childByAppendingPath(uid).setValue(user)
此处理总是响应错误。
REF_USERS.childByAppendingPath(uid).childByAppendingPath("username").setValue(user["username"]) { (error: NSError!, result: Firebase!) in if error != nil { print(error.localizedDescription) } else { self.REF_USERS.childByAppendingPath(uid).setValue(user) } }
这是我的安全规则,我如何修复一切可以防止重复的用户?
"users": { ".read": "auth !== null", "$user": { "username": { ".read": "auth !== null", ".write": "newData.val() === auth.uid && !data.exists()" } } },
更新:
从Frank的回答中,我不知道在这种情况下快速注册新用户时需要做什么。
app : { users: { "some-user-uid": { email: "test@test.com" username: "myname" } }, usernames: { "myname": "some-user-uid" } }
我需要为两个不同的节点同时添加相同的用户uid吗? 如果有人在Swift中解释它。 这会很棒。
"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" } } }
我无法将新的用户信息添加到用户名父节点。 这需要另一个安全规则?
如果您尝试阻止重复的Firebase用户名,则可以在createUser阶段完成。
假设一个对话框提交给新用户,要求创build一个帐户:这将得到他们想要的用户名和密码。
发送到createUser,如果有错误(因为它已经存在)通知他们,并要求一个不同的userName:
myRootRef.createUser(email, password: pw, withValueCompletionBlock: { error, result in if error != nil { self.errMsgField.stringValue = "email/username in use, try again" } else { let uid = result["uid"] as! String //the uid of the new user print("user created as \(uid)") self.authUserWithAuthData( email, password: pw ) //auth the user } })
用户创build后,你可能会添加他们的信息/用户节点。