有没有办法在Firebase User中锁定displayName?

cidc1ykv  于 2023-05-01  发布在  其他
关注(0)|答案(3)|浏览(104)

我试图解决firebase auth中缺少username属性的问题,并考虑在UserInfo.displayName属性中存储用户名。这是必要的,这样我就可以在安全规则中获得显示名称auth.token.name,然后将其用作用户名。
然而,看起来updateProfile方法没有被锁定,所以可以想象用户可以用他们的令牌攻击API并直接调用updateProfile将显示名称更改为其他人的用户名。 www.example.com
有没有一种方法可以锁定displayName,使其在客户端或注册后不可编辑?

8ljdwjyq

8ljdwjyq1#

  • 我是燃烧者 *

无法将用户配置文件更改限制为初始用户注册。该配置文件中的公共属性(当前为displayNamephotoURL)是用户的,可以更改。
如果您希望对为用户保留的属性进行更多控制,则必须将它们保存在辅助系统中,例如Alex在其回答中提到的数据库。

w46czmvw

w46czmvw2#

正如Frank货车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。换句话说,如果数据已经存在,则无法写入。

raogr8fs

raogr8fs3#

您也可以将用户名存储在custom claim中。用户将无法对其进行修改。
在服务器上设置它(或无服务器函数,通常在Firestore中创建用户文档后触发):

getAuth().setCustomUserClaims(uid, { username: "MonkeyBonkey" })

把它放在客户端:

firebase.auth().currentUser.getIdTokenResult()
  .then(idTokenResult => console.log(idTokenResult.claims.username))

相关问题