【问题标题】:Is there a way to lock down displayName in Firebase User?有没有办法在 Firebase 用户中锁定 displayName?
【发布时间】:2018-03-13 18:33:41
【问题描述】:

我正在尝试解决 firebase 身份验证中缺少用户名属性的问题,并且正在考虑将用户名存储在用户配置文件本身的 UserInfo.displayName 属性中。这是必要的,以便我可以在安全规则中获取显示名称为auth.token.name,然后将其用作用户名。

但是,updateProfile 方法似乎没有被锁定,因此可以想象用户可以使用他们的令牌破解 api 并直接调用 updateProfile 以将该显示名称更改为其他人的用户名。 https://firebase.google.com/docs/reference/js/firebase.User#updateProfile

有没有办法可以锁定该 displayName 以使其在客户端或注册后无法编辑?

【问题讨论】:

    标签: firebase firebase-authentication firebase-security


    【解决方案1】:

    正如 Frank van Puffelen 在他的回答中提到的以及 user482594 在他的评论中指出的那样,您无法“锁定”FirebaseUser 属性,例如displayName。但是,您可以将该数据添加到数据库中并使用 Firebase 安全规则将其锁定,如下所述。

    是的,有一种方法可以使用Firebase Security Rules 实现此目的。您不仅可以对用户名执行此操作,还可以对您需要的所有字段执行此操作。请查看您需要在相应级别的安全规则中添加的以下代码行。

    ".write": "!data.exists() || !newData.exists()"
    

    这意味着you can write as long as old data or new data does not exist。也就是说,如果数据已经存在,就不能写。

    【讨论】:

    • 但是用户名不存在于会员用户信息中,而不存在于 firebase 数据库中?我无法在 Firebase.User 数据存储上设置 Firebase 规则,可以吗?
    • 用户名属性存在于会员用户信息中,但为了使用 Firebase 规则保护您的数据库,您需要使用这些属性(displayName、email、phoneNumber、photoURL、providerId 和 uid)在 Firebase 数据库中创建用户) 然后使用所需的安全规则。您不能直接在 Firebase.User 上使用安全规则。
    • OP 询问如何锁定 FirebaseUser 个人资料记录。您的回复似乎是在谈论锁定 Firebase DB 记录,这是无关紧要的。截至 2019 年,没有可用于 Firebase 身份验证的安全规则。
    • @user482594 哦,是的,你是对的。我的回答不是很清楚。现在才更新。希望您重新考虑我的回答并收回反对票。感谢您的评论。
    【解决方案2】:

    firebaser 在这里

    无法将用户个人资料更改限制为初始用户注册。该配置文件中的公共属性(当前为displayNamephotoURL)是用户可以更改的。

    如果您想更好地控制为用户保留的属性,则必须将它们保留在辅助系统中,例如 Alex 在他的回答中提到的数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      相关资源
      最近更新 更多