React - Firebase - GoogleAuthProvider 不是构造函数

新手上路,请多包涵

我正在尝试创建一个 React 应用程序,它使用“使用 Google 登录”按钮来触发 signInWithPopup(provider) 。但是每次我调用 new firebaseApp.auth.GoogleAuthProvider() 我的控制台都会返回一个错误。我只是想 console.log() result

错误

未捕获的类型错误:_firebase_setup2.default.auth.GoogleAuthProvider 不是构造函数

firebase_setup.js

 import * as firebase from 'firebase';

const firebaseConfig = {
  apiKey: "AIzaSyAKlWtFZvbvuNy2qC68Xt5xzaTQVyy9l2o",
  authDomain: "doordash-ff045.firebaseapp.com",
  databaseURL: "https://doordash-ff045.firebaseio.com",
  storageBucket: "doordash-ff045.appspot.com",
};

const firebaseApp = firebase.initializeApp(firebaseConfig);

export default firebaseApp;

登录.js

 import React, { Component } from 'react';
import { browserHistory } from 'react-router';
import firebaseApp from '../../../services/firebase_setup';

export default class Login extends Component {

  componentDidMount() {
    firebaseApp.auth().onAuthStateChanged(user => {
      if (user) {
        console.log(user);
        browserHistory.push('/profile');
      }
    });
  }

  authenticate() {
    var provider = new firebaseApp.auth.GoogleAuthProvider();
    provider.addScope('profile');
    provider.addScope('email');

    firebaseApp.auth().signInWithPopup(provider)
      .then(result => {
        console.log(result);
      })
  }

  render() {
    return (
      <div>
        <h1>Login Page</h1>
        <button onClick={this.authenticate.bind(this)}>
          Login with Google
        </button>
      </div>

    );
  }
}

我将不胜感激对这个问题的任何见解!我查阅了许多教程,但在尝试声明 provider 变量时总是遇到同样的错误。

原文由 szier 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 327
2 个回答

您将命名空间与实例混合在一起: firebaseApp 只是配置数据的容器。这不是您创建提供者实例的方式。

正确的方法是:

 var provider = new firebase.auth.GoogleAuthProvider();

原文由 Frank van Puffelen 发布,翻译遵循 CC BY-SA 3.0 许可协议

我遇到了这个“不是构造函数”的问题和其他一些错误。我正在做这样的事情:

 var googleProvider = new myApp.auth.GoogleAuthProvider();

应该在什么时候

var googleProvider = new firebase.auth.GoogleAuthProvider();

我还用这样的名称初始化我的应用程序:

 var myApp = firebase.initializeApp(appConfig, "App");

哪个没有初始化默认应用程序并给了我更多错误。我应该这样做(因为我只有一个应用程序)

 var myApp = firebase.initializeApp(appConfig);

原文由 Trev14 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题