有没有更好的方法在没有多个获取请求的情况下实现这个?

Is there a better way of implementing this without multiple fetch request?

这是来自 React 应用程序的登录组件,我正在尝试使用 Firebase 作为我的实时数据库进行简单的身份验证登录。

我的第一个方法是执行获取请求 (GET) 以查看是否存在任何现有用户。之后,如果密码确实与用户匹配,我想将“isLoggedIn”字段更新为 true。为了实现以下,又发起了一个fetch请求(PATCH)。

因此,我想知道在一个函数中有多个获取请求是否是一种不好的做法,并且想知道是否有更有效或更好的方法来实现这个简单的应用程序?

 const loginHandler = async (userName, password) => {
    const url = `insert_url_link_here/users/${userName}.json`;
    try {
      const response = await fetch(url);
      const user = await response.json();
      if (user.password === password) {
        await fetch(url, {
          method: "PATCH",
          body: JSON.stringify({ isLoggedIn: true }),
        });

      }
    } catch (error) {
      console.log(error);
    }

这是我的数据库的架构。

--users:
    eric:
        isLoggedIn: false
        password: "321"

    test:
        isLoggedIn: false
        password: "222"

我建议使用 Firebase 客户端实现并查看 Firebase 文档。有各种语言的详细描述和明确的示例:

https://firebase.google.com/docs/auth/web/start

此外,我看不出在你这边存储密码或登录状态有什么意义,因为 Firebase Auth 已经以安全的方式为你做了这件事。

您正在通过它的 REST API 访问 Firebase 实时数据库,它实现了简单的 CRUD 操作,并且无法将读取和写入操作合并到一个操作中。

唯一的其他相关操作是 conditional write,如果数据自读取后未被修改,您可以使用它仅写入数据。您可以使用它来实现乐观的 compare-and-set 之类的交易机制,但鉴于您正在切换布尔值,它似乎不适用于此处。


如果您在支持它的环境中,您可能需要考虑使用适用于该平台的 Firebase SDK,因为 SDK 通常使用网络套接字与服务器通信,这通常会导致很多比执行多个单独的 HTTP 请求更有效。