Я хочу знать, как мы можем сохранить данные пользователя во время регистрации в Firestore.
import {
createUserWithEmailAndPassword,
onAuthStateChanged,
signInWithEmailAndPassword,
signOut,
} from "firebase/auth";
import { collection, setDoc, doc } from "firebase/firestore";
import React, { useContext, useEffect, useState } from "react";
import { auth, db } from "../firebaseConfig";
const AuthContext = React.createContext();
export const useAuth = () => {
return useContext(AuthContext);
};
export const AuthProvider = ({ children }) => {
const [currentUser, setCurrentUser] = useState();
const [loading, setLoading] = useState(true);
const signup = async (email, password) => {
return createUserWithEmailAndPassword(auth, email, password).then(
(cred) => {
setDoc(doc(collection(db, "users", cred.user.uid)), {
name: "manan",
city: "chd",
});
}
);
};
const login = (email, password) => {
return signInWithEmailAndPassword(auth, email, password);
};
const logout = () => {
return signOut(auth);
};
useEffect(() => {
const unsubscribe = onAuthStateChanged(auth, (user) => {
setCurrentUser(user);
setLoading(false);
});
return unsubscribe;
}, []);
const value = {
currentUser,
login,
signup,
logout,
};
return (
<AuthContext.Provider value = {value}>
{!loading && children}
</AuthContext.Provider>
);
};
как видите, я создал AuthContext.js
для всех функций. теперь, когда в signup()
я не могу хранить пользовательские данные, соответствующие их UID... как я использовал
setDoc(doc(collection(db, "users", cred.user.uid)), {
name: "manan",
city: "chd",
});
а он вообще не работает выдает ошибку
ошибка:
Objects are not valid as a React child (found: object with keys {error}). If you meant to render a collection of children, use an array instead.
вы используете как документ, так и коллекцию в качестве ссылки. вы должны использовать ссылку на документ только на setDoc
от:
setDoc(doc(collection(db, "users", cred.user.uid)), {
name: "manan",
city: "chd",
});
изменить на:
setDoc(doc(db, "users", cred.user.uid), {
name: "manan",
city: "chd",
});
Большое спасибо, приятель. это действительно сработало... :)