Firebase 身份验证错误:TypeError:authInstance._getRecaptchaConfig不是函数

Firebase Authentication Error : TypeError: authInstance._getRecaptchaConfig is not a function

提问人:Bhaskar 提问时间:11/18/2023 最后编辑:Bhaskar 更新时间:11/18/2023 访问量:20

问:

当我提交表格时,我收到上述类型错误。我正在提供动态验证,也使用react路由器。你能帮我解决这个问题吗?最初,我使用 useContext 来获取最新的有效状态,并使用最新的身份验证状态对组件进行条件渲染。所以我使用了 auth-context。但是我删除了它并使用 React 路由器、Firebase 身份验证和本地存储管理页面更改。

import React, {
  useState,
  useEffect,
  useReducer,
//   useContext,
  useRef,
  Fragment,
} from "react";

import Card from "../components/UI/Card/Card";
import Button from "../components/UI/Button/Button";
// import AuthContext from "../store/auth-context";
import Input from "../components/UI/Input/Input";
import classes from "./Signup.module.css";
import { createUserWithEmailAndPassword } from "firebase/auth";
import auth from "../config/firebase";
import { useNavigate } from "react-router";
import { Link } from "react-router-dom";
import MainHeader from "../components/MainHeader/MainHeader";

const emailReducer = (state, action) => {
  if (action.type === "USER_INPUT") {
    return { value: action.val, isValid: action.val.includes("@" && ".com") };
  }
  if (action.type === "INPUT_BLUR") {
    return { value: state.value, isValid: state.value.includes("@" && ".com") };
  }
  return { value: "", isValid: false };
};

const passwordReducer = (state, action) => {
  if (action.type === "USER_INPUT") {
    return { value: action.val, isValid: action.val.trim().length > 6 };
  }
  if (action.type === "INPUT_BLUR") {
    return { value: state.value, isValid: state.value.trim().length > 6 };
  }
  return { value: "", isValid: false };
};

const Signup = (props) => {
  // const [enteredEmail, setEnteredEmail] = useState('');
  // const [emailIsValid, setEmailIsValid] = useState();
  // const [enteredPassword, setEnteredPassword] = useState('');
  // const [passwordIsValid, setPasswordIsValid] = useState();
  const [formIsValid, setFormIsValid] = useState(false);

  const navigate = useNavigate();

  const [emailState, dispatchEmail] = useReducer(emailReducer, {
    value: "",
    isValid: null,
  });
  const [passwordState, dispatchPassword] = useReducer(passwordReducer, {
    value: "",
    isValid: null,
  });

  //   const authCtx = useContext(AuthContext);

  const emailInputRef = useRef();
  const passwordInputRef = useRef();

  useEffect(() => {
    console.log("EFFECT RUNNING");

    return () => {
      console.log("EFFECT CLEANUP");
    };
  }, []);

  const { isValid: emailIsValid } = emailState;
  const { isValid: passwordIsValid } = passwordState;
  const { value: email } = emailState;
  const { value: password } = passwordState;

  useEffect(() => {
    const identifier = setTimeout(() => {
      console.log("Checking form validity!");
      setFormIsValid(emailIsValid && passwordIsValid);
    }, 500);

    return () => {
      console.log("CLEANUP");
      clearTimeout(identifier);
    };
  }, [emailIsValid, passwordIsValid]);

  const emailChangeHandler = (event) => {
    dispatchEmail({ type: "USER_INPUT", val: event.target.value });

    // setFormIsValid(
    //   event.target.value.includes('@') && passwordState.isValid
    // );
  };

  const passwordChangeHandler = (event) => {
    dispatchPassword({ type: "USER_INPUT", val: event.target.value });

    // setFormIsValid(emailState.isValid && event.target.value.trim().length > 6);
  };

  const validateEmailHandler = () => {
    dispatchEmail({ type: "INPUT_BLUR" });
  };

  const validatePasswordHandler = () => {
    dispatchPassword({ type: "INPUT_BLUR" });
  };

  const submitHandler = async (event) => {
    event.preventDefault();
    if (formIsValid) {
      //   authCtx.onLogin(emailState.value, passwordState.value);
      try {
        const userCredential = await createUserWithEmailAndPassword(
          auth,
          email,
          password
        );
        console.log(userCredential);
        const user = userCredential.user;
        localStorage.setItem("token", user.accessToken);
        localStorage.setItem("user", JSON.stringify(user));
      } catch (error) {
        console.error(error);
      }
      navigate('/Login')
    } else if (!emailIsValid) {
      emailInputRef.current.focus();
    } else {
      passwordInputRef.current.focus();
    }
  };

  return (
    <Fragment>
      <MainHeader pageinfo={"User Signup Page"} />
      <main>
        <Card className={classes.login}>
          <form onSubmit={submitHandler}>
            <Input
              ref={emailInputRef}
              id="email"
              label="E-Mail"
              type="email"
              isValid={emailIsValid}
              value={emailState.value}
              onChange={emailChangeHandler}
              onBlur={validateEmailHandler}
            />
            <Input
              ref={passwordInputRef}
              id="password"
              label="Password"
              type="password"
              isValid={passwordIsValid}
              value={passwordState.value}
              onChange={passwordChangeHandler}
              onBlur={validatePasswordHandler}
            />
            <div className={classes.actions}>
              <Button
                type="submit"
                className={classes.btn}
              >
                Signup
              </Button>
            </div>
          </form>
          {
            <p>
              Already a User ? <Link to="/Login">Login</Link>
            </p>
          }
        </Card>
      </main>
    </Fragment>
  );
};

export default Signup;
Login.js:121 TypeError: authInstance._getRecaptchaConfig is not a function
    at handleRecaptchaFlow (recaptcha_enterprise_verifier.ts:191:1)
    at EmailAuthCredential._getIdTokenResponse (email.ts:127:1)
    at _processCredentialSavingMfaContextIfNecessary (mfa_error.ts:71:1)
    at _signInWithCredential (credential.ts:37:1)
    at signInWithCredential (credential.ts:69:1)
    at signInWithEmailAndPassword (email_and_password.ts:322:1)
    at submitHandler (Login.js:114:1)
    at HTMLUnknownElement.callCallback (react-dom.development.js:4164:1)
    at Object.invokeGuardedCallbackDev (react-dom.development.js:4213:1)
    at invokeGuardedCallback (react-dom.development.js:4277:1)
reactjs firebase firebase 身份验证

评论

0赞 Drew Reese 11/18/2023
您的 firebase 代码设置/配置是否正确?这似乎是身份验证实例的 firebase 问题。createUserWithEmailAndPassword
0赞 Bhaskar 11/18/2023
是的,它配置正确。这是来自 “firebase/app” 的代码 import { initializeApp };从 “firebase/auth” 导入 { getAuth };const firebaseConfig = { };const app = initializeApp(firebaseConfig);export const auth = getAuth(app);导出默认应用;
0赞 Drew Reese 11/18/2023
是否有可以在帖子中包含的错误堆栈跟踪?请参阅最小可重现示例
0赞 Bhaskar 11/18/2023
是的,我发布了错误堆栈。请帮忙

答:

0赞 Bhaskar 11/18/2023 #1

我犯了一个愚蠢的错误,但不知何故,它没有出现在错误中。如果您看到代码(从“....”导入身份验证),我正在像默认函数一样导入身份验证,但它没有导出为默认函数。因此,我应该使用 { auth } 而不仅仅是 auth。 它现在已经恢复了。但不确定为什么它没有显示“身份验证未首先定义”