Firebase是否有一个名为元数据的特殊实时表来存储用户元数据?

edqdpe6u  于 2023-05-07  发布在  其他
关注(0)|答案(1)|浏览(88)

根据有关Control Access with Custom Claims and Security Rules的文档,我可以阅读以下示例:

// Set custom user claims on this newly created user.
    await getAuth().setCustomUserClaims(user.uid, customClaims);

    // Update real-time database to notify client to force refresh.
    const metadataRef = getDatabase().ref("metadata/" + user.uid);

    // Set the refresh time to the current UTC timestamp.
    // This will be captured on the client to force a token refresh.
    await metadataRef.set({refreshTime: new Date().getTime()});

是否意味着默认情况下有一个名为metatadata的Firebase实时数据库表,其中包含有关用户的信息?或者这是一个例子,我可以使用,例如,Firestore集合来存储此信息?

m3eecexj

m3eecexj1#

该页面中的解决方案使用RealtimeDatabase从更新令牌的服务器端代码向客户机发送一个信号,通知客户机需要刷新其ID令牌。
您显示了服务器端代码,但这是来自同一页面的客户端伴随代码:

metadataRef = firebase.database().ref('metadata/' + user.uid + '/refreshTime');
callback = (snapshot) => {
  // Force refresh to pick up the latest custom claims changes.
  // Note this is always triggered on first call. Further optimization could be
  // added to avoid the initial trigger when the token is issued and already contains
  // the latest claims.
  user.getIdToken(true);
};
// Subscribe new listener to changes on that node.
metadataRef.on('value', callback);

因此,这段代码监听metadata/$uid/refreshTime路径上的更改,并在该值更改时强制刷新ID标记,因此它始终具有最新的ID标记,并具有服务器端代码设置的最新自定义声明。
数据库调用中的metadata路径没有什么特别之处,您可以使用任何您喜欢的路径--只要客户端和服务器同意该路径。
您还可以使用任何其他机制将更改从服务器发送到客户机。

相关问题