Веб-приложение – невозможно сохранить данные в базе данных Firebase FirestoreJavascript

Форум по Javascript
Ответить
Anonymous
 Веб-приложение – невозможно сохранить данные в базе данных Firebase Firestore

Сообщение Anonymous »

Я создал файл Signup.ts и файл auth-web.ts.
Код в порядке, я могу зарегистрироваться и создать учетную запись. Электронная почта успешно аутентифицирована в 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;
auth-web.ts:

Код: Выделить всё

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 };
};
signup.ts:

Код: Выделить всё

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



);
}
это файлы, в которых у меня есть код, я все перепробовал, я даже изменил правило хранения Firebase на общедоступное, но ничего не происходит.
в веб-консоли у меня следующая ошибка:

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»