当前位置: 首页 > 知识库问答 >
问题:

react firebase config.env文件不起作用

宓博实
2023-03-14

我有一个关于使用react应用程序配置firebase的问题。我将所有firebase配置信息作为环境变量放在顶部目录的.env文件中。当我尝试将它们用作<code>process.env时。REACT_APP_smth,它们都不起作用。一旦我将变量替换为真实的原始配置信息,我的应用程序就可以工作了。但可以肯定,这太危险了,所以我不想这么做。

有人知道如何解决这个问题吗??感谢您提前在这里花费的时间和精力。

我把REACT_APP_FIREBASE_API_KEY换成了123456789。

REACT_APP_FIREBASE_API_KEY = "123456789"
REACT_APP_FIREBASE_AUTH_DOMAIN = "kinnikuhub.firebaseapp.com"
REACT_APP_FIREBASE_DATABASE_URL = "https://kinnikuHub.firebaseio.com"
REACT_APP_FIREBASE_PROJECT_ID = "kinnikuhub"
REACT_APP_FIREBASE_STORAGE_BUCKET = "kinnikuhub.appspot.com"
REACT_APP_FIREBASE_MESSAGING_SENDER_ID = "131675559"
REACT_APP_FIREBASE_APP_ID = "1:131675559:web:3ca3bbad263b6be90ff282"
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
// import { getAnalytics } from "firebase/analytics";
import { addDoc, getDocs, getFirestore } from "firebase/firestore"
import { getAuth, signInWithPopup, GoogleAuthProvider } from "firebase/auth";
import { collection } from "firebase/firestore";
// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
  apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
  authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
  projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
  storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
  messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,
  appId: process.env.REACT_APP_FIREBASE_APP_ID,
};

// Initialize Firebase
const app = initializeApp(firebaseConfig);
// const analytics = getAnalytics(app);
export const db = getFirestore();

export const auth = getAuth(app);
const provider = new GoogleAuthProvider();
export const signInWithGoogle = () => {
  signInWithPopup(auth, provider)
    .then((res) => {
      console.log(res);
      
      // todo: Why create users table?? To let users have personal info, number of answers and quizzes cretaed, biography, sns links, etc
      // todo: 1st, check if res.user exists
      const userCollectionRef = collection(db, 'users');
      let userExistance = false;
      console.log(`currentUser.uid => ${res.user.uid}`)
      console.log(userExistance)
      const checkUserExists = async () => {
        const querySnapshot = await getDocs(userCollectionRef);
        querySnapshot.forEach( (doc) => {
          // doc.data() is never undefined for query doc snapshots
          // console.log(doc.id, " => ", doc.data());      
          // console.log(`currentUser.uid => ${res.user.uid}`)
          if (doc.data().uid === res.user.uid) {
            userExistance = true;
            // console.log(userExistance)
            return 0;
          }
        });
        console.log(userExistance)
        // todo: 2nd, add this user to users collection if it doesn't exists
        if (userExistance === false) {
          console.log(`userExistance is false, meaning this user hasn't been registerd so I am going add the user into users collection!!! ${res.user.displayName}, ${JSON.stringify(res.user)}`)
          const addUser = async () => {
            const payload = {
              username: res.user.displayName,
              uid: res.user.uid,
              email: res.user.email,
              photoURL: res.user.photoURL,
              createdAt: new Date(),
              bio: "biography",
            };
            await addDoc(userCollectionRef, payload);
          }
          addUser();
        } else {
          console.log('This user has been already registered!! So glad he/she keeps using this app!!')
        }
      }
      checkUserExists();


    }).catch((err) => {
      console.log(err);
    })
}

// export const AuthState = () => {
//   const [userInfo, setUserInfo] = useState({})
//   onAuthStateChanged(auth, (user) => {
//     if (user) {
//       const username = user.displayName;
//       const uid = user.uid;
//       const email = user.email;
//       const photoURL = user.photoURL
//       // const emailVerified = user.emailVerified
  
//       setUserInfo({username, uid, email, photoURL});
      
//       console.log(`username => ${username}`)
//       console.log(`uid => ${uid}`)
//       console.log(`email => ${email}`)
//       console.log(`photoURL => ${photoURL}`)
//       // console.log(`emailVerified => ${emailVerified}`)
//       return userInfo;
//     } else {
//       console.log("no user signed in")
//     }
//   })
// }

// sendEmailVerification(auth.currentUser)
//   .then(() => {
//     console.log('email verification sent!')
//   })

##.gitignore

# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
.env
npm-debug.log*
yarn-debug.log*
yarn-error.log*

背景:昨天,我初始化了我的电脑,在我的macbook air中安装了Monterey,电脑中的文件都不见了。然后,我git克隆了这个应用的repo。

共有3个答案

田宇
2023-03-14

.env 中的变量值不应括在引号中。删除引号。

艾正浩
2023-03-14

我也有同样的问题。我只用实际变量替换了项目ID来解决这个问题。

例:-

const firebaseConfig = {
    apiKey: process.env.REACT_APP_APIKEY,
    authDomain: process.env.REACT_APP_AUTHDOMAIN,
    projectId: "personal-portfolio-f1e9f",
    storageBucket: process.env.REACT_APP_STORAGEBUCKET,
    messagingSenderId: process.env.REACT_APP_MESSAGINGSENDERID,
    appId: process.env.APPID,
    measurementId: process.env.MEASUREMENTID
  };
楮自珍
2023-03-14

从我看到的情况来看,除了文件名本身之外,所有内容都是正确的。我也努力尝试让它工作,直到我做了这个简单的改变:

尝试将firebase.js文件重命名为firebase.config.js,这将把process.env变量读取为实际变量。

 类似资料:
  • 问题内容: Java控制器类: html文件: 角js: 这是我在服务器日志中无法理解的错误: 问题答案: 尝试以下方法。对我来说很好。 HTML你应该有 注意输入的名称。 然后在JS控制器方法中 现在在您的Java Controller类中 希望这对您有用。并且也要进行异常处理。

  • 问题内容: Java控制器类: html文件: 角js: 这是我在服务器日志中无法理解的错误: 问题答案: 尝试以下方法。对我来说很好。 HTML你应该有 注意输入的名称。 然后在JS控制器方法中 现在在您的Java Controller类中 希望这对您有用。并且也要进行异常处理。

  • 问题内容: 我使用FileWriter和BufferWriter写入文件。文件“ test.txt”已创建,但内部未写入任何内容。 该文件应写入我的按钮的ActionEvent中。那是为什么吗? 那是我的代码: 问题答案: 这里, 您将其包装在,默认缓冲区大小为8KB。因此,只要您不写超过8KB的内容并且不刷新/关闭它,它就不会出现在目标文件中。 完成后,您需要关闭编写器。这将刷新所有缓冲区并释放

  • 问题内容: 当我尝试对文件进行排序并将其输出保存在自身中时,就像这样 file1的内容将被完全删除,而当我尝试使用“ tee”命令执行同样的操作时 它运行良好 [ed:仅对具有幸运时机的小文件“运行良好”,会在大文件上或在无用的进程调度中导致数据丢失] ,即它会覆盖file1本身的排序输出并在标准输出中显示。 有人可以解释为什么第一种情况不起作用吗? 问题答案: 它不起作用,因为’>’重定向意味着

  • 我试图用pyinstaller创建python脚本的可执行文件,但它不起作用。 如果我从终端运行exe文件,我得到这些错误: 我在项目的虚拟环境中使用pip安装了pyInster。 我将感谢任何帮助。 先谢谢你。

  • 问题内容: 我对文件进行迭代有问题。这是我在解释器上键入的内容和结果: 当我尝试再次遍历同一个打开的文件时,我什么也没得到! 根本没有输出。为了解决这个问题,我必须对文件进行编辑,然后再次将其打开以进行读取!那是正常行为吗? 问题答案: 是的,这是正常行为。基本上,你是第一次读取文件的末尾(可以像读取磁带一样对它进行图片处理),因此除非你使用重定位到文件开头的位置进行重置,否则你将无法从文件中读取