Firebase权限:使用用户名和密码注册

时间:2017-08-17 23:09:08

标签: ios swift firebase firebase-authentication firebase-security

我想让我的用户使用唯一的用户名和密码(而不是电子邮件+密码)进行注册。我把所有事情都放在了我的地方:

注册

  1. 检查提供的用户名是否已存在
  2. 如果没有,则使用FIRAuth.auth()?.createUserWithEmail并使用电子邮件将用户名存储在数据库中,例如

    • 用户
      • QZqFzWxpdMfc0xmyIq5IDAr1bzr2
        • 凭证
          • 电子邮件:“myemail@gmail.com”
          • 用户名:“MyUsername”
      • RJasdfasfasdad3dadaewdsdkdq3dk
        • 凭证
          • 电子邮件:“another@gmail.com”
          • 用户名:“”另一个
  3. 登录

    1. 查询数据库以获取与用户名相关联的用户并使用该用户名获取电子邮件地址并使用FIRAuth.auth()?.signIn(withEmail: withEmail登录
    2. 虽然这种方法有效,但我想知道它如何与Firebase权限一起使用?

      为了获取与用户名相关联的电子邮件地址,我将不得不让所有用户访问我的电子邮件地址/用户名数据,例如

      {
        "rules": {
          ".read": true,
          ".write": "auth != null"
        }
      } 
      

      这是否意味着“黑客”可以获取已在我的应用中注册的所有用户的电子邮件地址?如果是这样,有没有办法安全地做到这一点?

1 个答案:

答案 0 :(得分:1)

如果规则设置为true,那么如果有人可以获取数据,那么回答你的问题:是的,我可以在注册时查询每个用户的所有内容。除非您正在测试,否则不要这样做。编写数据库规则:只有Firebase数据库可以访问每个数据并为您检查唯一名称。简单的例子:

{
  "allusernames": {
    ".read": false,
    ".write": "!data.exists() && newData.exists()"
  }
} 

当您的代码出现错误时,如果写入失败,则表示您已知道用户名。