尝试使用电子邮件注册后,我收到 Firebase: Error (auth/admin-restricted-operation) 错误。 (在我的项目设置中,我创建了允许使用电子邮件的用户。)这可能是我的项目设置中的某些内容?我在互联网上搜索了几个小时来解决这个问题,所以请帮忙,我对 firebase 真的很陌生。
import React, {useContext, useState, useEffect} from 'react'
import { auth } from '../firebase';
import { createUserWithEmailAndPassword, onAuthStateChanged } from "firebase/auth";
const AuthContext = React.createContext()
export function useAuth(){
return useContext(AuthContext)
}
export function AuthProvider({children}) {
const [currentUser, setUser] = useState();
function signup(email, password){
return createUserWithEmailAndPassword(auth, email, password);
}
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, user => {
setUser(user)
})
return unsubscribe
}, [])
const value = {
currentUser,
signup
}
return (
<AuthContext.Provider value={value}>
{children}
</AuthContext.Provider>
)
}
import {React, useRef, setError, useState} from 'react'
import { useAuth } from '../contexts/AuthContext';
function SignUp() {
const emailRef = useRef();
const passwordRef = useRef();
const passwordConfirmRef = useRef();
const {signup} = useAuth();
const handleSubmit = async (e) => {
e.preventDefault()
await signup(emailRef.value, passwordRef.value)
}
return (
<div>
<form onSubmit={handleSubmit}>
<label for="email">Email</label>
<input type="text" id="email" inputRef={emailRef} required></input>
<label for="password">Password</label>
<input type="password" id="password" inputRef={passwordRef} required></input>
<label for="email">Pasword Confirmation</label>
<input type="text" id="email" inputRef={passwordConfirmRef} required></input>
<button type="submit" >Sign Up</button>
</form>
</div>
)
}
export default SignUp
import * as firebase from "firebase/app"
import { getAuth } from "firebase/auth";
const app = firebase.initializeApp({
...
})
export const auth = getAuth()
export default app
你救了我!在其他地方,人们错误地认为启用匿名身份验证作为 [auth/admin-restricted-operation] 的正确解决方案。当然,这是错误的。
启用匿名身份验证一开始是有效的,所以每个人都竖起大拇指,但这只是因为匿名身份验证不需要发送电子邮件和密码。当我们意识到当我们只是启用匿名身份验证而不解决实际问题时,我们无法使用注册时使用的电子邮件和密码登录时,麻烦就来了。
真正的答案是我们没有正确发送电子邮件和密码,就像您的情况一样,因此电子邮件/密码身份验证说“不,只有管理员可以做到这种魔法”。
我们必须检查我们的登录数据。这就是答案。 非常感谢!
所以呃我解决了这个问题...
export const auth = getAuth(***app***);
我有
export const auth = getAuth();
解释:
由于使用 inputRef 而不是 ref,我发送的输入是(未定义,未定义),因此管理员受到限制。
请检查您是否将正确的参数传递给 createUserWithEmailAndPassword 方法。 就我而言,我的回调函数没有接收任何要传递给 setStateMethod 的文本。我像这样使用我的代码
onChangeText={() => setEmail()
我做了什么? 只需将文本传递给这样的方法即可:
onChangeText={(text) => setEmail(text)
2024 - 解决方案
我必须更新我的 firebase 设置以允许注册。
Firebase -> Authentication -> Settings -> Enable create (sign-up)
。
我认为当您从其他文件调用注册(电子邮件,密码)功能时,您无法提供电子邮件和密码。