Firebase实时数据库规则不适用于新用户

汤姆·达里斯

我的Firebase实时数据库有以下规则:

{
  "rules": {
    "users": {
      "$user_id": {
        ".read": "auth !== null && auth.uid == $user_id",
        ".write": "auth !== null && auth.uid == $user_id",
        ".validate": "data.hasChildren(['calculations', 'daily', 'firstName', 'lastName', 'monthly', 'profileImageUrl', 'uid', 'username', 'weekly'])",
        "calculations": {
          ".validate": "data.isNumber()",
        },
        "daily": {
          ".validate": "data.isNumber()",
        },
        "firstName": {
          ".validate": "data.isString()",
        },
        "lastName": {
          ".validate": "data.isString()",
        },
        "monthly": {
          ".validate": "data.isNumber()",
        },
        "profileImageUrl": {
          ".validate": "data.isString()",
        },
        "uid": {
          ".validate": "data.isString()",
        },
        "username": {
          ".validate": "data.isString()",
        },
        "weekly": {
          ".validate": "data.isNumber()",
        },
        "$other": {
          ".validate": false
        }
      }
    }
  }
}

适用于新用户的旧Firebase实时数据库规则:

{
  "rules": {
    ".read": "auth.uid == $user_id",
    ".write": "auth.uid == $user_id"
  }
}

使用电子邮件和密码进行Firebase身份验证:

// Firebase Authentication to create a user with email and password
auth.createUserWithEmailAndPassword(email, password)
    .addOnCompleteListener(this) { task ->
        if (task.isSuccessful) {
            val user = auth.currentUser
            // Send an email verification to the user. Only allow them to login after they
            // have verified their email.
            user!!.sendEmailVerification().addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    // Save username, first name, and last name on Firebase Database
                    val uid = auth.uid ?: ""
                    val ref = database.getReference("/users/$uid")
                    val newUser = User(uid, userName, firstName, lastName, 0.0, 0.0, 0.0, 3, "")
                    ref.setValue(newUser)

                    Toast.makeText(
                        this,
                        "Please check your inbox and verify your email address.",
                    Toast.LENGTH_LONG).show()

                    val intent = Intent(this, LoginActivity::class.java)
                    intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK.or(Intent.FLAG_ACTIVITY_NEW_TASK)
                    startActivity(intent)
                }
            }
        }
    }
    // If sign in fails, display a message to the user.
    .addOnFailureListener {
        Toast.makeText(
            baseContext, "Failed to create an account: ${it.message}",
            Toast.LENGTH_LONG
        ).show()
    }

用户类别:

@IgnoreExtraProperties
data class User(
    val uid: String,
    val username: String,
    var firstName: String,
    var lastName: String,
    val daily: Double,
    val weekly: Double,
    val monthly: Double,
    val calculations: Int,
    val profileImageUrl: String
)

这些规则适用于现有用户。但是,如果我尝试创建一个新用户,这些规则将不起作用。我无法在数据库中为已注册的新用户创建新数据。我该如何解决?

弗兰克·范普菲伦

我的猜测是,您需要验证新数据是否为正确的类型。所以:

"calculations": {
  ".validate": "newData.isNumber()",
},

如果您查看有关验证数据的Firebase文档,您会发现它们也全部进行了检查,newData而不是data在写操作之前引用数据)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么从 Firebase 数据库检索数据不适用于用户身份验证规则但使用匿名规则?

来自分类Dev

Firebase实时数据库-规则

来自分类Dev

Firebase数据库安全性规则适用于模拟器,而不适用于Java代码

来自分类Dev

用于检查用户是否在频道中的Firebase规则不适用于.exists或.val

来自分类Dev

Firebase实时数据库验证规则不起作用

来自分类Dev

Firebase 实时数据库规则不起作用

来自分类Dev

Firebase安全规则不适用于CollectionGroup

来自分类Dev

适用于Android的Firebase实时数据库内部数据表示

来自分类Dev

新用户的 Firebase 数据库安全

来自分类Dev

用于阻止创建/删除的Firebase实时数据库安全规则

来自分类Dev

Firebase实时数据库规则拒绝权限

来自分类Dev

创建/更新/删除 Firebase 实时数据库规则

来自分类Dev

gerrit自定义首页不适用于v3.0等新用户界面

来自分类Dev

为什么访问规则不适用于非根用户组?

来自分类Dev

如何通过REST API将当前用户从Angular应用发送到Firebase实时数据库规则

来自分类Dev

图例不适用于实时数据和while循环配置

来自分类Dev

URL重写规则不适用于localhost(Apache)

来自分类Dev

htaccess重写规则不适用于首页

来自分类Dev

CSS规则不适用于HTML元素

来自分类Dev

.htaccess重写规则不适用于我

来自分类Dev

JSF导航规则不适用于表单提交

来自分类Dev

CSS规则不适用于jquery附加的元素

来自分类Dev

.htaccess规则不适用于奇怪的字符

来自分类Dev

某些CSS规则不适用于外部链接

来自分类Dev

UFW规则不适用于Docker

来自分类Dev

JSF导航规则不适用于表单提交

来自分类Dev

iptables规则不适用于端口80

来自分类Dev

iptables时间规则不适用于反向时间

来自分类Dev

重写规则不适用于分页

Related 相关文章

  1. 1

    为什么从 Firebase 数据库检索数据不适用于用户身份验证规则但使用匿名规则?

  2. 2

    Firebase实时数据库-规则

  3. 3

    Firebase数据库安全性规则适用于模拟器,而不适用于Java代码

  4. 4

    用于检查用户是否在频道中的Firebase规则不适用于.exists或.val

  5. 5

    Firebase实时数据库验证规则不起作用

  6. 6

    Firebase 实时数据库规则不起作用

  7. 7

    Firebase安全规则不适用于CollectionGroup

  8. 8

    适用于Android的Firebase实时数据库内部数据表示

  9. 9

    新用户的 Firebase 数据库安全

  10. 10

    用于阻止创建/删除的Firebase实时数据库安全规则

  11. 11

    Firebase实时数据库规则拒绝权限

  12. 12

    创建/更新/删除 Firebase 实时数据库规则

  13. 13

    gerrit自定义首页不适用于v3.0等新用户界面

  14. 14

    为什么访问规则不适用于非根用户组?

  15. 15

    如何通过REST API将当前用户从Angular应用发送到Firebase实时数据库规则

  16. 16

    图例不适用于实时数据和while循环配置

  17. 17

    URL重写规则不适用于localhost(Apache)

  18. 18

    htaccess重写规则不适用于首页

  19. 19

    CSS规则不适用于HTML元素

  20. 20

    .htaccess重写规则不适用于我

  21. 21

    JSF导航规则不适用于表单提交

  22. 22

    CSS规则不适用于jquery附加的元素

  23. 23

    .htaccess规则不适用于奇怪的字符

  24. 24

    某些CSS规则不适用于外部链接

  25. 25

    UFW规则不适用于Docker

  26. 26

    JSF导航规则不适用于表单提交

  27. 27

    iptables规则不适用于端口80

  28. 28

    iptables时间规则不适用于反向时间

  29. 29

    重写规则不适用于分页

热门标签

归档