【问题标题】:Firebase allowing only the creator to postFirebase 只允许创建者发帖
【发布时间】:2017-07-21 14:43:52
【问题描述】:

我一直在为我的个人网站开发一个博客应用程序,我只想允许自己发布新的博客帖子,但允许所有登录的用户将 cmets 添加到帖子中。

这是当前数据的样子:

"posts": {
  "-KpZlH9PYs7mAf8avBmI" : {
    "comments" : {
      "-KpZwWIrbM3JQ2ug1c5_" : {
        "message" : "How are you today?",
        "timestamp" : 1500637173055,
        "user" : "Florin Pop"
      },
      "-KpZyxoC0OTxnDZymP-M" : {
        "message" : "I'm fine, thank you!",
        "timestamp" : 1500637814102,
        "user" : "Florin Pop"
      }
    },
    "likes" : 0,
    "text" : "asxszx",
    "timestamp" : 1500634227427,
    "title" : "qwqew"
  }
}

如您所见,帖子包含:cmets 列表文本时间戳标题

我不确定这个结构是否最适合我想要的。

有没有办法检查我是否是当前登录的用户,然后才允许创建新帖子?

我应该把 cmets 分开吗?

附言

目前我的数据库规则是:

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

【问题讨论】:

    标签: javascript firebase firebase-realtime-database firebase-authentication firebase-security


    【解决方案1】:

    我建议您进行以下更改:

    在数据库根目录下新建对象admins,可以编辑/创建帖子的用户:

    "admins": {
        "<ADMIN_1_UID>": "true",
        "<ADMIN_2_UID>": "true"
    }
    

    然后像这样更改您的安全规则:

    "rules": {
        "admins": {
            ".read": false,
            ".write": false /*This ensures that only from firebase console you can add data to this object*/
        },
        "posts": {
            ".read": true,
            ".write": "root.child('admins').child(auth.uid).val()" /*This ensures only admin can write post stuff*/
            "$postId": {
                "comments": {
                    ".write": "auth != null" /*This overrides the above write rule and allow authenticated users to post comments*/
                }
            }
        }
    }
    

    【讨论】:

    【解决方案2】:

    我应该把 cmets 分开吗?

    即使不知道应用的所有细节,答案也几乎肯定是“是”。在不同的顶级节点中拥有不同的实体类型通常会大大简化数据库的安全规则。

    有什么方法可以检查我是否是当前登录的用户。

    在安全规则中,您可以检查操作是否来自具有auth != null 身份验证用户。但据我所知,您的 JSON 不包含 UID,所以我不清楚 当前用户是谁。

    【讨论】:

    • 嗯...我目前有auth != null,但这允许所有用户在网站上创建博客文章。我只想让自己这样做。有没有办法通过电子邮件或 github 进行检查?
    • 我在上面的问题中添加了我目前拥有的规则......这样可以确保只有经过身份验证的用户才能将 cmets 添加到帖子中。
    • 要访问安全规则中的电子邮件地址,请参阅stackoverflow.com/questions/37986097/…
    • 这是检查用户是否是我的博客应用程序的最佳方法?
    • 我需要将所有用户存储在 Firebase 数据库中吗?
    猜你喜欢
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 2015-05-28
    相关资源
    最近更新 更多