Firebase createUserWithEmailAndPassword 仅创建匿名用户

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

我正在使用 Firebase 的用户名和密码方法为我的网站编写帐户创建功能。除非我启用匿名用户创建模式,然后仅创建匿名用户,否则当前的实现不起作用,这不是我想要的。鉴于 Firebase 要求代码实现的方式是这样的,为什么此代码不会创建经过身份验证的用户?

import { getAuth, createUserWithEmailAndPassword } from "firebase/auth";
import { initializeApp } from "firebase/app";

const SignUp = () => {

    const firebaseConfig = {
        apiKey: "{apiKey}",
        authDomain: "{domain}",
        projectId: "{projectID}",
        storageBucket: "{bucket}",
        messagingSenderId: "{id}",
        appId: "{id}",
        measurementId: "{id}"
    };
      
    const app = initializeApp(firebaseConfig);

    const userSignUp = ({ email, password }) => {
        const auth = getAuth(app);
        createUserWithEmailAndPassword(auth, email, password)
        .then((userCredential) => {
            const user = userCredential.user;
            console.log(user);
        })
        .catch((error) => {
            const errorCode = error.code;
            const errorMessage = error.message;
            console.log(errorMessage);
        });
    };

    function handleSignUp(e) {
        e.preventDefault();
        const form = e.target;
        const formData = new FormData(form);
        const formJson = Object.fromEntries(formData.entries());
        console.log(formJson.email + " " + formJson.password)
        userSignUp(formJson.email, formJson.password);
    }

    return(
        <>
            <h1>Sign Up</h1>
            <form method="post" onSubmit={handleSignUp}>
                <label>
                    Email: <input type="email" name="email"/>
                </label>
                <label>
                    Password: <input type="password" name="password"/>
                </label>
                <button type="submit">Submit</button>
            </form>
        </>
    );
}

export default SignUp

这样做的结果是这个错误:

SignUp.jsx:20 POST https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=AIzaSyA4EnTbw40XnyYjHRHYjvWAxJ42STDF3cA 400(错误请求)

这个控制台消息:

Firebase:错误(身份验证/管理限制操作)。

reactjs firebase firebase-authentication
1个回答
0
投票

查看

userSignUp
的定义,您已将其定义为解构作为第一个参数传入的对象。

const userSignUp = ({ email, password }) => {
  // ...
}

为了更清楚地说明这一点,它具有相同的功能,但没有简写:

const userSignUp = (opts) => {
  let { email, password } = opts;
  // ...
}

因为您使用

userSignUp
调用
userSignUp(formJson.email, formJson.password)
,这意味着您正在解构字符串值而不是您期望的对象 - 这意味着
email
password
都将被提取为
undefined

// userSignUp("[email protected]", "someExamplePass") would mean:
let { email, password } = "[email protected]";

// email: undefined (because "".email === undefined)
// password: undefined (because "".password === undefined)

似乎当您调用

createUserWithEmailAndPassword(auth, undefined, undefined)
时,Firebase 创建了一个匿名用户? (这很奇怪,对我来说也是新闻,但我可以在我的沙箱中重现它)

您需要使用:

const userSignUp = (email, password) => { ... }

userSignUp(formJson.email, formJson.password);

const userSignUp = ({ email, password }) => { ... }

userSignUp(formJson);
© www.soinside.com 2019 - 2024. All rights reserved.