Firebase认证中,是否有一种方法可以删除自定义声明?

8
为了设置自定义声明,可以使用以下方法:
admin.auth().setCustomUserClaims(uid,{claim:value});

There does exist

admin.auth().updateUser(uid,{claim:value});

我不太清楚这两者之间的区别,而且似乎都不能真正删除之前应用的自定义声明。

3个回答

18
文档中:
引用: 你可以通过将customClaims设置为null来删除用户的自定义声明。
所以这样应该可以删除该声明:
admin.auth().updateUser(uid, {claim: null});

正如其他人所指出的那样,API已经发生了变化,目前在Node.js中设置自定义声明的方法是:

getAuth()
  .setCustomUserClaims(uid, { admin: true })
  .then(() => {
    // The new custom claims will propagate to the user's ID token the
    // next time a new one is issued.
  });

请查看链接的文档,其中包含更多代码示例,这些示例也比我在这里输入的内容更有可能是最新的。 :)

1
太快了!Jen Person说得没错,你是firebase stackoverflowage之王。谢谢! - ecalvo
1
不用谢。在这种情况下,我的工作并不多,只是打开有关自定义声明的链接页面,搜索“remove”(没有相关结果),然后搜索“delete”。 - Frank van Puffelen
4
使用最新的管理SDK,我需要使用admin.auth().setCustomUserClaims(user.uid, null); - TimL
@FrankvanPuffelen 如果只需要删除其中一个声明怎么办?需要全部读取再写入吗? - Fakeer
是的,没有仅发送更新的API,因此读取、在内存中修改、写入是该过程。 - Frank van Puffelen
@FrankvanPuffelen 你的答案应该更新为使用 setCustomUserClaims - undefined

9

@FrankvanPuffelen的答案无疑是他回答时的正确答案,然而,截至今日(2020年11月30日), updateUser 方法的第二个参数称为 properties,是一个 UpdateRequest接口,它没有 claim属性。

现在将自定义声明设置已移动到setCustomUserClaims方法中。

您可以通过以下方式进行设置...

admin.auth().setCustomUserClaims(uid, { admin: true });

...唯一删除它的方法是将整个对象设置为 null。如果存在多个声明,似乎没有选择性地删除一个声明的方法。

admin.auth().setCustomUserClaims(uid, null); 

0

我认为你不能使用updateUser来完成这个任务,我认为你仍然需要调用

admin.auth().setCustomUserClaims(uid, {claim:null}); 

3
这将"claim"属性设置为null,但似乎并没有将其移除。 - Fakeer
@Fakeer 我认为(虽然我最近才开始使用Firebase),旧的方式是使用updateUser,并且claim属性似乎被用于设置自定义声明,但现在似乎已经改变了,实际上,新的方法是使用setCustomUserClaims。然而,在后一种情况下,不再需要claim属性,将claim:null设置为一个名为claim的自定义声明值为null - benomatis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接