You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase邮箱密码认证出现auth/admin-restricted-operation错误求解决

Firebase邮箱密码认证报错:auth/admin-restricted-operation

我在个人项目中用Firebase实现邮箱密码认证,提交表单时遇到如下错误:

FirebaseError: Firebase: Error (auth/admin-restricted-operation).
at createErrorInternal (assert.ts:136:55)
at _fail (assert.ts:65:9)
at _performFetchWithErrorHandling (index.ts:177:9)
at async _performSignInRequest (index.ts:195:27)
at async createUserWithEmailAndPassword (email_and_password.ts:230:20)
at async handleSubmit (Signup.tsx:13:7)

AuthContext.tsx 组件代码

import { createContext, useContext, useEffect, useState } from "react";
import { auth } from "../firebase";
import {
  createUserWithEmailAndPassword,
  signInWithEmailAndPassword,
  signOut,
  onAuthStateChanged,
} from "firebase/auth";

interface IUserData {
  email: string;
  password: string;
}

interface IContext {
  signUp: any;
  logIn: any;
  logOut: any;
  user: any;
}

const AuthContext = createContext<IContext | null>(null);

export function AuthContextProvider({ children }: any) {
  const [user, setUser]: any = useState({});

  function signUp({ email, password }: IUserData) {
    return createUserWithEmailAndPassword(auth, email, password);
  }

  function logIn({ email, password }: IUserData) {
    return signInWithEmailAndPassword(auth, email, password);
  }

  function logOut({}) {
    return signOut(auth);
  }

  useEffect(() => {
    const unsubscribe = onAuthStateChanged(auth, (currentUser) => {
      setUser(currentUser);
    });
    return () => {
      unsubscribe();
    };
  });

  return (
    <AuthContext.Provider value={{ signUp, logIn, logOut, user }}>
      {children}
    </AuthContext.Provider>
  );
}

export function UserAuth() {
  return useContext(AuthContext);
}

Signup.tsx 注册表单代码

import React from "react";
import { Link } from "react-router-dom";
import { UserAuth } from "../../context/AuthContext";

export default function Signup() {
  const [email, setEmail] = React.useState("");
  const [password, setPassword] = React.useState("");
  const { user, signUp }: any = UserAuth();

  const handleSubmit = async (e: any) => {
    e.preventDefault();
    try {
      await signUp(email, password);
    } catch (error) {
      console.log(error);
    }
  };

  return (
    <div>
      <img
        src="img.jpg"
        alt="background-image"
      />
      <div>
        <div className="max-w-[450px] h-[500px] mx-auto bg-black/75 text-white">
          <div className="max-w-[320px] mx-auto py-16">
            <h1 className="text-3xl font-bold">Sign Up</h1>
            <form onSubmit={handleSubmit} className="w-full flex flex-col py-4">
              <input
                type="email"
                placeholder="Email or phone number"
                className="p-3 my-2 bg-gray-700 rounded"
                onChange={(e) => setEmail(e.target.value)}
              />
              <input
                type="password"
                placeholder="Password"
                className="p-3 my-2 bg-gray-700 rounded"
                onChange={(e) => setPassword(e.target.value)}
              />
              <button className="bg-red-600 my-4 py-3 font-bold">
                Sign Up
              </button>
              <div className="flex justify-between text-sm text-gray-500">
                <p>
                  <input type="checkbox" className="mr-2" />
                  Remember me
                </p>
                <p>Need help ?</p>
              </div>
              <p className="py-8">
                <span className="text-gray-600">
                  Already subscribed to Filmeon?
                </span>
                <Link to="/login" className="mx-2">
                  Sign In
                </Link>
              </p>
            </form>
          </div>
        </div>
      </div>
    </div>
  );
}

此前查论坛有人建议启用匿名认证,但我需要邮箱密码认证,求解决这个错误。


解决方案

这个错误主要由两个原因导致,按以下步骤逐一修复:

1. 启用Firebase邮箱/密码登录方式

  • 打开Firebase控制台,进入你的项目
  • 左侧菜单选择「Authentication」→「登录方法」
  • 找到「邮箱/密码」选项,点击「启用」并保存设置

2. 修复代码参数传递不匹配问题

你的AuthContext中signUp函数要求接收一个包含email和password的对象,但Signup组件调用时直接传了两个独立参数,导致请求异常:
修改Signup.tsx中的handleSubmit函数:

const handleSubmit = async (e: any) => {
  e.preventDefault();
  try {
    // 改为传递对象,匹配AuthContext的signUp定义
    await signUp({ email, password });
  } catch (error) {
    console.log(error);
  }
};

3. 排查安全规则(可选)

如果以上两步完成后仍报错,检查Firebase Auth的用户操作权限:

  • 控制台「Authentication」→「设置」→「用户操作」
  • 确保「创建用户」权限未设置为仅管理员

完成以上步骤后,重新测试注册功能即可解决问题。

内容的提问来源于stack exchange,提问作者Somebody

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:32:05