简体   繁体   English

将firebaseui CDN与nuxt.js集成,firebase未定义错误

[英]Integrate firebaseui CDN with nuxt.js, firebase not defined error

I'm working on integrating localized firebaseui with nuxt.js (ssr). 我正在努力将本地化的firebaseui与nuxt.js(ssr)集成。 But I run into a "firebase is not defined" error. 但我遇到了“未定义Firebase”错误。 I'm new to ssr and nuxt.js, I truly hope anyone could explain why this setup doesn't work. 我是ssr和nuxt.js的新手,我真的希望有人能解释为什么此设置不起作用。 Any help is appreciated! 任何帮助表示赞赏!

firebaseui instruction: https://github.com/firebase/firebaseui-web#localized-widget firebaseui指令: https : //github.com/firebase/firebaseui-web#localized-widget

nuxt.config.js (part of related) nuxt.config.js(相关部分)

plugins: [{ src: "~/plugins/firebase.js" }],

plugins/firebase.js plugins / firebase.js

import firebase from "firebase/app";
import "firebase/firestore";
import "firebase/auth";

if (!firebase.apps.length) {
  firebase.initializeApp(process.env.firebaseConfig);
}

export const authProviders = {
  Google: firebase.auth.GoogleAuthProvider.PROVIDER_ID,
  Email: firebase.auth.EmailAuthProvider.PROVIDER_ID
};
export const firestore = firebase.firestore();
export const fireAuth = firebase.auth();
export default firebase;

pages/Login.vue pages / Login.vue

<template>
  <no-ssr>
    <div class="login">
      <div id="firebaseui-auth-container"></div>
    </div>
  </no-ssr>
</template>

<script>
import firebase, { fireAuth, authProviders } from "~/plugins/firebase";

export default {
  name: "Login",
  head() {
    return {
      title: "Login",
      script: [
        {
          src: 'https://www.gstatic.com/firebasejs/ui/4.1.0/firebase-ui-auth__en.js'
        }
      ],
      link: [
        {
          rel: "stylesheet",
          href: "https://cdn.firebase.com/libs/firebaseui/4.1.0/firebaseui.css"
        }
      ]
    };
  },
  mounted() {

    var checkFirebaseUi = setInterval(function() {

      if (window.firebaseui) {
        clearInterval(checkFirebaseUi);

        const firebaseui = window.firebaseui;


        console.log(firebase) // this line works

        // error comes from here
        // the code from firebaseui cdn return firebase not definded
        // but it's clearly accessible    
        const ui =
          firebaseui.auth.AuthUI.getInstance() ||
          new firebaseui.auth.AuthUI(fireAuth);

        ui.start("#firebaseui-auth-container", {
          credentialHelper: firebaseui.auth.CredentialHelper.NONE,
          signInOptions: [authProviders.Google, authProviders.Email],
          signInFlow: "popup",
          tosUrl: "/tos",
          privacyPolicyUrl: "/privacy-policy",
          callbacks: {
            signInSuccessWithAuthResult: this.signInResult
          }
        });
      }
    }, 100);

  }
};
</script>

When I open login page, error returns: 当我打开登录页面时,错误返回:

Uncaught ReferenceError: firebase is not defined at new qo (firebase-ui-auth__en.js:formatted:10762) at login.js:59 未捕获的ReferenceError:在登录(login.js:59)的新环境(firebase-ui-auth__en.js:formatted:10762)上未定义firebase

It worked after I add this in /pages/Login.vue 我在/pages/Login.vue中添加此文件后,它起作用了

beforeMount() {
  window.firebase = firebase;
},

I suppose firebaseui cdn require firebase object from window object. 我想firebaseui cdn需要window对象的firebase对象。 I wonder is this the nature of external resources work for frontend? 我想知道这是外部资源为前端工作的本质吗? Any idea? 任何想法?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM