createUserWithEmailAndPassword 后 Firebase 错误身份验证/管理限制操作

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

尝试使用电子邮件注册后,我收到 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

javascript reactjs firebase-authentication
5个回答
10
投票

你救了我!在其他地方,人们错误地认为启用匿名身份验证作为 [auth/admin-restricted-operation] 的正确解决方案。当然,这是错误的。

启用匿名身份验证一开始是有效的,所以每个人都竖起大拇指,但这只是因为匿名身份验证不需要发送电子邮件和密码。当我们意识到当我们只是启用匿名身份验证而不解决实际问题时,我们无法使用注册时使用的电子邮件和密码登录时,麻烦就来了。

真正的答案是我们没有正确发送电子邮件和密码,就像您的情况一样,因此电子邮件/密码身份验证说“不,只有管理员可以做到这种魔法”。

我们必须检查我们的登录数据。这就是答案。 非常感谢!


5
投票

所以呃我解决了这个问题...

  • 忘了补充
export const auth = getAuth(***app***);

我有

export const auth = getAuth();
  • 我在表单中使用了 inputRef 而不是 ref

解释:

由于使用 inputRef 而不是 ref,我发送的输入是(未定义,未定义),因此管理员受到限制。


2
投票

请检查您是否将正确的参数传递给 createUserWithEmailAndPassword 方法。 就我而言,我的回调函数没有接收任何要传递给 setStateMethod 的文本。我像这样使用我的代码

onChangeText={() => setEmail()

我做了什么? 只需将文本传递给这样的方法即可:

      onChangeText={(text) => setEmail(text)

0
投票

2024 - 解决方案
我必须更新我的 firebase 设置以允许注册。

Firebase -> Authentication -> Settings -> Enable create (sign-up)


-1
投票

我认为当您从其他文件调用注册(电子邮件,密码)功能时,您无法提供电子邮件和密码。

© www.soinside.com 2019 - 2024. All rights reserved.