Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firestore自定义声明未更新用户界面_Javascript_Firebase_Google Cloud Firestore_Firebase Security - Fatal编程技术网

Javascript Firestore自定义声明未更新用户界面

Javascript Firestore自定义声明未更新用户界面,javascript,firebase,google-cloud-firestore,firebase-security,Javascript,Firebase,Google Cloud Firestore,Firebase Security,我使用新用户注册时创建的自定义声明来保护我的路由 allow read, write: if resource.data.ownerId == request.auth.uid; 但是,当新用户注册时,它不会将自定义声明更新到UI!这意味着新用户只有在注销并再次登录后才能访问内容,这是一种非常糟糕的体验 在文档中,firebase团队表示他们可以使用以下命令强制进行UI更新: const metadataRef = admin.database().ref("metadata/" + user

我使用新用户注册时创建的自定义声明来保护我的路由

allow read, write: if resource.data.ownerId == request.auth.uid;
但是,当新用户注册时,它不会将自定义声明更新到UI!这意味着新用户只有在注销并再次登录后才能访问内容,这是一种非常糟糕的体验

在文档中,firebase团队表示他们可以使用以下命令强制进行UI更新:

const metadataRef = admin.database().ref("metadata/" + user.uid);
return metadataRef.set({refreshTime: new Date().getTime()});

我在前端/后端都遵循了这段代码,但我认为这段代码只适用于实时数据库,而不是firestore。文档中没有强制UI使用firestore更新的代码,我的所有尝试都失败了


有什么想法吗?

要刷新JavaScript客户端中的令牌,请执行以下操作:

user.getIdToken(true)
如果您的客户机在其他平台上运行,那么对所有其他平台都有相同的调用。但无论平台是什么,您都需要进行此调用以刷新用户的令牌,以便它获取新的/更新的声明

这样做完全独立于任何其他Firebase功能,因此它不依赖于实时数据库或Firestore


您共享的JavaScript代码不会刷新客户端中的自定义声明,而是要在设置自定义声明的受信任环境中运行。代码仅在实时数据库中标记用户配置文件上次更新的时间

然后在客户机上运行另一段代码,侦听此数据库值,如果数据库标志更改,则强制客户机刷新用户的ID标记

该代码位于您在下共享的同一文档页中