我试图解决firebase auth中缺少username属性的问题,并考虑在UserInfo.displayName
属性中存储用户名。这是必要的,这样我就可以在安全规则中获得显示名称auth.token.name
,然后将其用作用户名。
然而,看起来updateProfile方法没有被锁定,所以可以想象用户可以用他们的令牌攻击API并直接调用updateProfile将显示名称更改为其他人的用户名。 www.example.com
有没有一种方法可以锁定displayName,使其在客户端或注册后不可编辑?
3条答案
按热度按时间8ljdwjyq1#
无法将用户配置文件更改限制为初始用户注册。该配置文件中的公共属性(当前为
displayName
和photoURL
)是用户的,可以更改。如果您希望对为用户保留的属性进行更多控制,则必须将它们保存在辅助系统中,例如Alex在其回答中提到的数据库。
w46czmvw2#
正如Frank货车Puffelen在他的回答中提到的,以及user482594在他的评论中指出的,你没有办法“锁定”
FirebaseUser
属性,比如displayName
。但是,您可以将该数据添加到数据库中并使用Firebase安全规则锁定它,如下所述。是的,有一种方法可以使用
Firebase Security Rules
实现这一点。您不仅可以为用户名这样做,还可以为您需要的所有字段这样做。请参阅下面的代码行,您需要在相应级别的安全规则中添加它。这意味着
you can write as long as old data or new data does not exist
。换句话说,如果数据已经存在,则无法写入。raogr8fs3#
您也可以将用户名存储在custom claim中。用户将无法对其进行修改。
在服务器上设置它(或无服务器函数,通常在Firestore中创建用户文档后触发):
把它放在客户端: