Spaces:
Build error
Build error
File size: 1,986 Bytes
20c8fc2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | import React, { useContext, useState, useEffect } from "react";
import { auth, db } from "../firebase";
import {
createUserWithEmailAndPassword,
signInWithEmailAndPassword,
signOut,
onAuthStateChanged,
updateProfile
} from "firebase/auth";
import { doc, setDoc } from "firebase/firestore";
const AuthContext = React.createContext();
export function useAuth() {
return useContext(AuthContext);
}
export function AuthProvider({ children }) {
const [currentUser, setCurrentUser] = useState();
const [loading, setLoading] = useState(true);
async function signup(email, password, name, username) {
const userCredential = await createUserWithEmailAndPassword(auth, email, password);
const user = userCredential.user;
// Update Profile
await updateProfile(user, {
displayName: name
});
// Create User Document
try {
await setDoc(doc(db, "users", user.uid), {
uid: user.uid,
name: name,
username: username,
email: email,
createdAt: new Date().toISOString()
});
} catch (error) {
console.error("Error writing user document: ", error);
// Continue even if DB write fails, as Auth is successful
}
return userCredential;
}
function login(email, password) {
return signInWithEmailAndPassword(auth, email, password);
}
function 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>
);
}
|