Код в порядке, я могу зарегистрироваться и создать учетную запись. Электронная почта успешно аутентифицирована в Firebase, однако коллекция даже не создана в Firebase.
config.ts
Код: Выделить всё
// apps/web/firebase/config.ts
import { initializeApp, getApps } from "firebase/app";
import {
getAuth,
GoogleAuthProvider,
browserLocalPersistence,
setPersistence,
} from "firebase/auth";
import { getFirestore } from "firebase/firestore";
import { getStorage } from "firebase/storage";
const firebaseConfig = {
apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.REACT_APP_FIREBASE_APP_ID,
};
const app = getApps().length === 0 ? initializeApp(firebaseConfig) : getApps()[0];
export const auth = getAuth(app);
export const db = getFirestore(app);
export const storage = getStorage(app);
export const googleProvider = new GoogleAuthProvider();
setPersistence(auth, browserLocalPersistence).catch((err) =>
console.error("Persistence error:", err)
);
export default app;
Код: Выделить всё
import { auth, db } from "./config";
import {
createUserWithEmailAndPassword,
signInWithEmailAndPassword,
signInWithPopup,
GoogleAuthProvider,
onAuthStateChanged,
signOut,
updateProfile,
User,
} from "firebase/auth";
import { doc, setDoc, serverTimestamp } from "firebase/firestore";
import { useState, useEffect } from "react";
const googleProvider = new GoogleAuthProvider();
const saveUserToFirestore = async (user: User) => {
if (!db) throw new Error("Firestore not initialized");
console.log("Saving user to Firestore:", user.uid);
const userDoc = doc(db, "users", user.uid);
await setDoc(
userDoc,
{
uid: user.uid,
email: user.email,
displayName: user.displayName || "",
createdAt: serverTimestamp(),
},
{ merge: true }
);
};
export const signUpWeb = async (email: string, password: string, name?: string) => {
if (!auth) throw new Error("Firebase auth not initialized");
const result = await createUserWithEmailAndPassword(auth, email, password);
if (name) {
await updateProfile(result.user, { displayName: name });
}
await saveUserToFirestore(result.user);
return result.user;
};
export const loginWeb = async (email: string, password: string) => {
if (!auth) throw new Error("Firebase auth not initialized");
const result = await signInWithEmailAndPassword(auth, email, password);
await saveUserToFirestore(result.user);
return result.user;
};
export const loginGoogleWeb = async () => {
if (!auth) throw new Error("Firebase auth not initialized");
const result = await signInWithPopup(auth, googleProvider);
await saveUserToFirestore(result.user);
return result.user;
};
export const logoutWeb = async () => {
if (!auth) throw new Error("Firebase auth not initialized");
return signOut(auth);
};
export const useWebAuthState = () => {
const [user, setUser] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
if (!auth) return;
const unsubscribe = onAuthStateChanged(auth, (firebaseUser) => {
setUser(firebaseUser);
setLoading(false);
});
return unsubscribe;
}, []);
return { user, loading };
};
Код: Выделить всё
import { useState } from "react";
import { signUpWeb as signupEmailWeb, loginGoogleWeb } from "../../../firebase/auth-web";
import { useRouter } from "next/router";
export default function SignupPage() {
const router = useRouter();
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const [error, setError] = useState("");
const handleSignup = async () => {
setError("");
try {
await signupEmailWeb(email, password);
router.push("/");
} catch (err: any) {
setError(err.message);
}
};
const handleGoogleSignup = async () => {
setError("");
try {
await loginGoogleWeb();
router.push("/");
} catch (err: any) {
setError("Google Sign-In failed");
}
};
return (
Create Account
Continue with Google
── or ──
setEmail(e.target.value)}
style={{
display: "block",
width: "100%",
padding: "10px",
marginTop: "10px",
}}
/>
setPassword(e.target.value)}
style={{
display: "block",
width: "100%",
padding: "10px",
marginTop: "10px",
}}
/>
{error &&
{error}
}
Sign Up
Already have an account?{" "}
router.push("/login")}
style={{ color: "#007bff", cursor: "pointer" }}
>
Login
);
}
в веб-консоли у меня следующая ошибка:
webchannel_blob_es2018.js:49 GET https://firestore.googleapis.com/google ... te/channel.... 400 (неверный запрос)
[2025-11-11T02:12:28.160Z] @firebase/firestore: Firestore (12.5.0): поток записи RPC WebChannelConnection RPC 0x49d736ed произошла ошибка транспорта. Имя: неопределенное Сообщение: неопределенное
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-database