我正在使用 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:错误(身份验证/管理限制操作)。
查看
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);