【发布时间】:2020-01-18 08:42:08
【问题描述】:
我正在创建一个多人游戏网站。我正在使用 firebase 的三个功能。
- Firebase 身份验证
- Firestore
- 实时数据库
永久数据存储在 Firestore 中。比如头像、用户名等。firestore 中的数据存储在集合users 中,密钥与我们从user.uid 获得的身份验证ID 相同
第二个数据是临时数据,包含聊天消息和当前游戏情况和玩家回合等。这些数据存储在实时数据库中。
实时数据库中有两个基础对象。一个是rooms,另一个是users。当用户登录网站时,永久数据会从 Firestore 中获取并与临时数据一起放置(因为我们可能需要一次又一次地显示永久数据)。我用来获取永久数据并与临时数据创建组合的函数是
//'uid' 是永久的id,用于firestore 和身份验证。
export const addUser = async (uid: string) => {
//gets the permanent data from firestore
const data = await getUserData(uid);
//Set it to realtime database my adding one more temp prop
return await dbUsers.child(uid).set({...data, messages: []});
};
到目前为止,当我必须在断开连接时删除用户时,问题就来了。我用过
export const removeUser = async (uid: string) => {
return await dbUsers.child(uid).remove();
};
上述方式不适用于多个标签。考虑如果用户打开了多个选项卡并且他只是关闭了一个服务器,那么实时数据库将认为它已注销。
我是否需要使用push() 方法在另一个id 的基础上创建实时数据。请指导我正确的路径。
【问题讨论】:
标签: javascript firebase firebase-realtime-database