javascript - React - Firebase - RecaptchaVerifier 不是构造函数

标签 javascript reactjs firebase firebase-authentication

我正在尝试创建一个使用“onSubmit”按钮来触发 handleSignUp() 的 React 应用程序。但是,每次我调用 handleSignUp() 时都会出现此错误

TypeError: _base__WEBPACK_IMPORTED_MODULE_2__.default.auth.RecaptchaVerifier is not a constructor



firebase 初始化 -base.js
import * as firebase from "firebase/app";
import "firebase/auth";

const app = firebase.initializeApp({
  apiKey: process.env.REACT_APP_FIREBASE_KEY,
  authDomain: process.env.REACT_APP_FIREBASE_DOMAIN,
  databaseURL: process.env.REACT_APP_FIREBASE_DATABASE,
  projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
  storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
  messagingSenderId: process.env.REACT_APP_FIREBASE_SENDER_ID
});

export default app;

注册.js
import React, { Component } from "react";
import { withRouter } from "react-router";
import app from "./base";

class SignUp extends Component {
  componentDidMount() {
    window.recaptchaVerifier = new app.auth.RecaptchaVerifier(this.recaptcha, {
      size: "normal",
      callback: function(response) {
        console.log("reCAPTCHA solved, allow signInWithPhoneNumber.");
      },
      "expired-callback": function() {
        console.log("Response expired. Ask user to solve reCAPTCHA again.");
      }
    });
    window.recaptchaVerifier.render().then(function(widgetId) {
      window.recaptchaWidgetId = widgetId;
    });
  }

  handleSignUp = async () => {
    var phoneNumber = "+16505554567";
    var appVerifier = new app.auth.RecaptchaVerifier("recaptcha-container");

    try {
      await app
        .auth()
        .signInWithPhoneNumber(phoneNumber, appVerifier)
        .then(function(confirmationResult) {
          window.confirmationResult = confirmationResult;
        });
    } catch (error) {
      alert(error);
    }
  };
  render() {
    return (
      <div ref={ref => (this.recaptcha = ref)}>
        <h1>Sign up</h1>
        <form onSubmit={this.handleSignUp}>
          <button type="submit">Sign Up</button>
        </form>
      </div>
    );
  }
}

export default withRouter(SignUp);

并运行 var appVerifier = new app.auth.RecaptchaVerifier("recaptcha-container"); 自动刷新网页

最佳答案

我在这上面花了 3 个小时,终于找到了问题所在。
当您初始化 Firebase 应用程序时

app.initializeApp(config);
然后您可以使用以下方法调用方法: app.auth()
app.auth().createUserWithEmailAndPassword(email, password);
要创建 RecaptchaVerifier 实例,您必须使用: app.auth
window.recaptchaVerifier = new app.auth.RecaptchaVerifier('captcha-container', {
        'size': 'invisible'
    });

关于javascript - React - Firebase - RecaptchaVerifier 不是构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58519055/

相关文章:

javascript - codeigniter 无法正确调用 jquery 中的 Controller 功能

javascript - jquery 将数据属性与数组中的值匹配

javascript - 将异步获取响应渲染为 React-Native 中的元素?

javascript - Cucumber JS 可以看到我的功能,但似乎没有运行步骤

javascript - 在 reactjs 中合成 html 代码

php - 在 PHP 应用程序中显示服务器端渲染的 ReactJS 组件

reactjs - 我应该对功能组件使用 _myMethod 吗?

Firebase:使用电子邮件 ID 作为 key

android - Firestore 查询其 uid 存在于列表中的所有文档

swift - 无法从 Firebase 加载我当前用户的帖子 - Swift