【问题标题】:Firebase Authentication React [duplicate]Firebase身份验证反应[重复]
【发布时间】:2021-06-06 20:06:58
【问题描述】:

我正在通过 react js 访问 firebase 上的火石数据库。这是我的firebase.js 文件:

import firebase from "firebase";
const firebaseConfig = {
  apiKey: "SECR",
  authDomain: "SECRET",
  projectId: "SECRET",
  storageBucket: "SECRET",
  messagingSenderId: "SECRET",
  appId: "SECRET",
};

const firebaseApp = firebase.initializeApp(firebaseConfig);
const db = firebaseApp.firestore();
const auth = firebase.auth();
const provider = new firebase.auth.GoogleAuthProvider();

export { auth, provider, db };

现在,如果我理解正确,这段代码只会告诉 firebase 我的数据库的位置。此文件是否也用作身份验证?

让我澄清一下,我现在正在写入数据库(这是在另一个文件上):

import { db } from "../firebase";
function Login() {
  const handleLogin = () => {
    const name = prompt("Type name");
    if (name) {
      db.collection("opponents").add({
        name: name,
      });
    }
  };

当我在 firebase 中的安全规则设置为允许所有人读写时,我可以在这里访问数据库。这不安全。我想改变它。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

所以我将规则替换为这个(并没有改变其他任何内容):

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

这一次没有成功。所以我的问题是,我如何安全地只授予我的代码对数据库的读/写访问权限。我可以这样做,如果我的 firebase 配置值正确,那么它可以让我访问吗?还是有更好的方法只允许我的代码访问数据库?

【问题讨论】:

  • 您似乎没有在您共享的代码中的任何位置登录 Firebase。
  • 哦,不,我从未通过我的代码登录到 Firebase。你的正确。我该怎么做呢?
  • @FrankvanPuffelen 我有点困惑我认为这个文档是为了允许用户使用 google/custom/github 等登录。我想我想要的是不同的,我想访问我的网站允许我的网站完全访问数据库。我理解错了吗?所以数据库只允许从我的网站读/写,而不是从任何随机网站

标签: reactjs firebase google-cloud-firestore


【解决方案1】:

您的安全规则中的 request.auth 变量仅在用户登录 Firebase 身份验证时设置,您共享的代码中似乎并非如此。

要开始向您的应用添加 Firebase 身份验证,请查看其documentation

【讨论】:

  • 我有点困惑我认为这个文档是为了允许用户使用 google/custom/github 等登录。我想我想要的是不同的,我想允许访问我的网站我的网站可以完全访问数据库。我理解错了吗?所以数据库只允许从我的网站读/写,而不是从任何随机网站
  • 这取决于“您的网站”是否是访问代码执行的地方。 “你的网站”是一个节点服务器,它处理 all 对数据库的访问,只为浏览器提供 HTML/CSS?因为您上面的代码看起来像是设计为在 IN THE BROWSER 中运行,在这种情况下 browser 需要访问数据库 - 即 USER - 而您将希望使用Firebase Auth 对这些用户进行身份验证,以便他们可以访问数据。
  • 如果您在服务器/节点环境中运行所有数据库访问,您需要 firestore-admin SDK - 这不是您所展示的。
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 2019-01-11
  • 2021-10-17
  • 2020-12-22
  • 2017-12-25
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多