javascript - 构建简单的网络应用程序时,Firebase UI 无法显示在按钮中
问题描述
我只是在使用 Firebase 构建您的第一个 Web 应用程序中关注 Google Developers Pathways 上的教程,我在第 6 步。每当我通过单击 RSVP 按钮测试注册时,该按钮都不会响应,就像 firebase UI 注册无法显示在浏览器的对话框中一样。我当然遵循所有步骤和代码。
我尝试在按钮中使用检查元素,并显示出类似这样的错误
preview-f4664a6cfd526d580909b.js:1 [2021-09-04T13:11:04.250Z] @firebase/auth: Auth (9.0.0): INTERNAL ASSERTION FAILED: Expected a class definition
console.<computed> @ preview-f4664a6cfd526d580909b.js:1
assert.ts:243 Uncaught (in promise) Error: INTERNAL ASSERTION FAILED: Expected a class definition
at debugFail (assert.ts:243)
at debugAssert (instantiator.ts:1)
at _getInstance (instantiator.ts:48)
at Array.map (<anonymous>)
at _initializeAuthInstance (location.ts:1)
at eval (register.ts:77)
at Component.eval [as instanceFactory] (register.ts:79)
at Provider.getOrInitializeService (provider.ts:351)
at Provider.initialize (provider.ts:257)
at new Auth (auth.ts:108)
这是我的 HTML 代码
<head>
<meta charset="utf-8">
<title>Firebase Meetup</title>
<link type="text/css" rel="stylesheet" href="https://cdn.firebase.com/libs/firebaseui/4.0.0/firebaseui.css" />
<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700|Roboto:300,400,700&display=swap"
rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="style.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<div id="app">
<!-- <img src="https://firebasestorage.googleapis.com/v0/b/fir-images-a61c9.appspot.com/o/firestore.png?alt=media&token=56d039dc-4a6c-477b-a153-a4bb8234646f" /> -->
<!-- <img src="https://firebasestorage.googleapis.com/v0/b/fir-images-a61c9.appspot.com/o/hosting.png?alt=media&token=57c8adb6-08c4-43f7-9395-4c299896a36c" /> -->
<img src="https://firebasestorage.googleapis.com/v0/b/fir-images-a61c9.appspot.com/o/codelab.png?alt=media&token=f45f808c-ce40-4b34-944c-8d8fac00e13d" />
<section id="event-details-container">
<h1>Firebase Meetup</h1>
<p><i class="material-icons">calendar_today</i> October 30</p>
<p><i class="material-icons">location_city</i> San Francisco</p>
<!-- ADDED RVSP BUTTON -->
<button id="startRsvp">RSVP</button>
</section>
<hr>
<section id="firebaseui-auth-container"></section>
<section id="description-container">
<h2>What we'll be doing</h2>
<p>Join us for a day full of Firebase Workshops and Pizza!</p>
</section>
<section id="guestbook-container">
</section>
</div>
</body>
<script type="module">
// Import the functions you need from the SDKs you need
import { initializeApp } from "https://www.gstatic.com/firebasejs/9.0.1/firebase-app.js";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
const firebaseConfig = {
apiKey: "AIzaSyDj4RNohGUdcRR1slvgZdUVNbKJ2odJkNc",
authDomain: "fir-web-codelab-398dd.firebaseapp.com",
projectId: "fir-web-codelab-398dd",
storageBucket: "fir-web-codelab-398dd.appspot.com",
messagingSenderId: "390940575886",
appId: "1:390940575886:web:5fc4e675e08423b59a21df"
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
</script>
这是我的 Javascript 代码
// Import stylesheets
import './style.css';
// Firebase App (the core Firebase SDK) is always required
import { initializeApp } from 'firebase/app';
// Add the Firebase products and methods that you want to use
import { getAuth, EmailAuthProvider } from 'firebase/auth';
import {} from 'firebase/firestore';
import * as firebaseui from 'firebaseui';
// Document elements
const startRsvpButton = document.getElementById('startRsvp');
const guestbookContainer = document.getElementById('guestbook-container');
const form = document.getElementById('leave-message');
const input = document.getElementById('message');
const guestbook = document.getElementById('guestbook');
const numberAttending = document.getElementById('number-attending');
const rsvpYes = document.getElementById('rsvp-yes');
const rsvpNo = document.getElementById('rsvp-no');
let rsvpListener = null;
let guestbookListener = null;
let db, auth;
async function main() {
// Your web app's Firebase configuration
const firebaseConfig = {
apiKey: 'AIzaSyDj4RNohGUdcRR1slvgZdUVNbKJ2odJkNc',
authDomain: 'fir-web-codelab-398dd.firebaseapp.com',
projectId: 'fir-web-codelab-398dd',
storageBucket: 'fir-web-codelab-398dd.appspot.com',
messagingSenderId: '390940575886',
appId: '1:390940575886:web:5fc4e675e08423b59a21df'
};
// Initialize Firebase
initializeApp(firebaseConfig);
auth = getAuth();
// const app = initializeApp(firebaseConfig);
// FirebaseUI config
const uiConfig = {
credentialHelper: firebaseui.auth.CredentialHelper.NONE,
signInOptions: [
// Email / Password Provider.
EmailAuthProvider.PROVIDER_ID
],
callbacks: {
signInSuccessWithAuthResult: function(authResult, redirectUrl) {
// Handle sign-in.
// Return false to avoid redirect.
return false;
}
}
};
const ui = new firebaseui.auth.AuthUI(auth);
// Listen to RVSP button clicks
startRsvpButton.addEventListener('click', () => {
ui.start('#firebaseui-auth-container', uiConfig);
});
}
main();
解决方案
当我注意到即使我按照这些步骤操作也不会出现 firebase UI 并且我还尝试运行 firebase 提供的示例代码并且当时它可以工作时,我正在回答我自己的问题。但是突然,当我尝试刷新应用程序并再次单击 RVSP 按钮时,firebase UI 将不再显示。我回去阅读说明,它说“你不希望页面刷新,因为你正在构建一个单页 Web 应用程序。” 而在这一点上,经过这么多天的思考和领悟,我终于明白了问题所在,我能够将自己推向极限。
推荐阅读
- python - 尝试使用 selenium python 脚本登录谷歌
- c++ - 并行构建 Visual Studio 解决方案会丢失一些静态库的 PDB
- javascript - 将 req.files 从服务器发送到服务器
- java - 带有 OAuth2 的 Spring WebClient 不存储访问令牌
- python-3.x - 人脸检测在android studio中不起作用
- ruby-on-rails - 如何将 find_by 应用于数组数组的元素 - Rails
- java - 打开 API UI 3.0.0 在底部隐藏架构,而不从 API 端点文档中删除它们
- stata - 输出比结果窗口可以记住的更广泛,因此日志捕获忘记记录
- firebase-cloud-messaging - 配置有一个 Firebase 项目的服务器可以向不同项目中应用的单个用户发送通知吗?
- c++ - 在 C++ 中读取非文本文件