类型错误:无法读取未定义的属性“GoogleAuthProvider”

问题描述 投票:0回答:13

使用 Angular cli v5 和 angularfire2 v5,控制台和终端上没有错误,一切运行正常,但在调用谷歌登录功能时在浏览器控制台上出现错误。

源代码:

import { Component, OnInit, HostBinding  } from '@angular/core';
import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';
import { Router } from '@angular/router';
import { moveIn } from '../router.animations';

@Component({
  selector: 'app-login',
  templateUrl: './login.component.html',
  styleUrls: ['./login.component.css'],
  providers: [AngularFireAuth],
  animations: [moveIn()],
  host: {'[@moveIn]': ''}
})
export class LoginComponent implements OnInit {

  error: any;
  constructor(public afAuth: AngularFireAuth) {  }

  loginGoogle() {
     this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());
  }

  logout() {
     this.afAuth.auth.signOut();
  }

  ngOnInit() {  }
}
angular firebase-authentication angular-cli google-oauth angularfire2
13个回答
10
投票

再次

npm install
时收到警告消息,消息是
[email protected] requires a peer of firebase@^4.5.0 but none was installed
,然后尝试使用4.5.0单独安装firebase。

npm install [email protected] --save

然后更改导入:

来自

import * as firebase from 'firebase/app';

import * as firebase from 'firebase';

现在运行良好。

注意:最后在app.module中添加了

import { AngularFireAuthModule } from 'angularfire2/auth';
以避免
Uncaught (in promise): Error: No provider for AngularFireAuth!


7
投票

使用以下两个导入。它应该可以解决您的问题。

import * as firebase from 'firebase/app';
import 'firebase/auth';

请注意,像下面这样导入整个 Firebase(开发 SDK)同样可以正常工作,但您会在控制台中收到一条警告,要求仅导入您打算使用的单个 SDK 组件。 将 Firebase 应用部署到生产环境时,不建议使用此方法。

import * as firebase from 'firebase';

4
投票

在导入部分添加以下代码行:

import * as firebase from 'firebase/app'; import 'firebase/auth';

在您的代码中:

firebase.auth().signInWithPopup(new firebase.auth.GoogleAuthProvider());

1
投票

终于在https://github.com/firebase/angularfire/issues/968

找到了解决方案

只需将

firebase
导入更改为
import { firebase } from '@firebase/app';
即可解决问题。


1
投票

这对我有用:我正在使用 Vue.js

import firebase from 'firebase/app'
...
created() {
    let provider = new firebase.auth.GoogleAuthProvider()
}

我不确定 Angular 应该如何处理。 也许这对 Vue.js 开发人员有帮助,所以我将其留在这里。


1
投票

在您想要使用 firebase 身份验证的 html 页面中使用它。

<script src="https://www.gstatic.com/firebasejs/3.2.0/firebase.js"></script>

1
投票

如果您只使用

import firebase from 'firebase/app'

你应该得到这个结果:

TypeError:无法读取未定义的属性“GoogleAuthProvider”

您可以添加:

import 'firebase/auth'

1
投票

我不确定这是否相关,但我通过导入身份验证模块解决了类似的问题,如下所示:

import { AngularFireAuth } from '@angular/fire/auth';
import { firebase } from '@firebase/app';
import '@firebase/auth';

1
投票

我的 firebase.js(插件)

import firebase from "firebase/app";
import "firebase/auth";
import dotenv from "dotenv";
dotenv.config();

// Import needed firebase modules

let config = {
  apiKey: process.env.VUE_APP_APIKEY,
  authDomain: process.env.VUE_APP_AUTHDOMAIN,
  databaseURL: process.env.VUE_APP_DATABASEURL,
  projectId: process.env.VUE_APP_PROJECTID,
  storageBucket: process.env.VUE_APP_STORAGEBUCKET,
  messagingSenderId: process.env.VUE_APP_MESSAGING_SENDER_ID,
  appId: process.env.VUE_APP_APP_ID,
  measurementId: process.env.VUE_APP_MEASUREMENT_ID
};

// Init our firebase app
firebase.initializeApp(config);

我的组件代码

import firebase from "../plugins/firebase.js";  **//error is here**
import { required, email } from "vuelidate/lib/validators";
import { mapGetters, mapMutations } from "vuex";
import { GET_LOADING, SET_LOADING } from "../store";

enter image description here

这是我解决问题的方法,我使用 vue 和 firebase google auth。 我正在导入我创建的插件文件(firebase.js),相反,只要您想使用google或任何其他身份验证方法lile,您就应该导入firebase/app;

import firebase/app

不是

import firebase from '../plugins/firebase.js'

现在我的组件代码如下所示。

    import firebase from "firebase/app";  
    import { required, email } from "vuelidate/lib/validators";
    import { mapGetters, mapMutations } from "vuex";
    import { GET_LOADING, SET_LOADING } from "../store";

这对我有用


0
投票

降级

firebase
软件包是一个可行的解决方案。

package.json
的依赖项下,将版本从
4.13.0
更改为
4.12.0
,如下所示:

"dependencies": {
     ...
     ...
     "firebase": "4.12.0"
     ...
     ...
}

然后运行

npm install


0
投票

遇到同样的错误。

"Cannot read property 'GoogleAuthProvider' of undefined"

没有使用 Angular JS,但我通过在 HTML 页面中包含 firebase auth 产品的 SDK 解决了这个问题:

<script src="https://www.gstatic.com/firebasejs/6.2.4/firebase-auth.js"></script>


0
投票

从“firebase/app”导入{initializeApp,FirebaseApp}; 从“firebase/analytics”导入{ getAnalytics }; 从“firebase/auth”导入{signInWithPopup,GoogleAuthProvider};

initializeApp(firebaseConfig);

initializeApp(firebaseConfig);

导出 const loginWhitGoogle = () => {

return signInWithPopup(new GoogleAuthProvider());

}


0
投票

而不是这个:

import * as firebase from 'firebase/app';

用这个:

import firebase from 'firebase/compat/app';

我希望这个解决方案对您有用,就像对我一样!

© www.soinside.com 2019 - 2024. All rights reserved.