-
Notifications
You must be signed in to change notification settings - Fork 2
/
firebase.js
129 lines (117 loc) · 3.14 KB
/
firebase.js
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// Import the functions you need from the SDKs you need
import { initializeApp } from "firebase/app";
import {
getAuth,
createUserWithEmailAndPassword,
signInWithEmailAndPassword,
signOut,
sendPasswordResetEmail,
onAuthStateChanged,
GoogleAuthProvider,
signInWithRedirect,
getRedirectResult,
} from "firebase/auth";
import {
doc,
setDoc,
getDoc,
getFirestore,
collection,
addDoc,
updateDoc,
} from "firebase/firestore";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
// Your web app's Firebase configuration
const firebaseConfig = {
apiKey: "AIzaSyDwuwcfV_yiEVliu-hwBDHSU9zvrzf0S88",
authDomain: "test-authentication-with-react.firebaseapp.com",
projectId: "test-authentication-with-react",
storageBucket: "test-authentication-with-react.appspot.com",
messagingSenderId: "509266572396",
appId: "1:509266572396:web:18a0816e4fc471a6c85449",
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const auth = getAuth();
const provider = new GoogleAuthProvider();
const db = getFirestore();
export const createUser = async (email, password) => {
createUserWithEmailAndPassword(auth, email, password)
.then(() => {
console.log("User created successfully");
})
.catch((error) => {
alert(error);
});
};
export const signIn = async (email, password) => {
await signInWithEmailAndPassword(auth, email, password)
.then(() => {
return auth.currentUser;
})
.catch((error) => {
alert(error);
});
};
export const signInWithGoogle = async () => {
signInWithRedirect(auth, provider);
};
export const getGoogleLogIn = async () => {
getRedirectResult(auth, provider)
.then((result) => {
console.log(result);
})
.catch((error) => {
console.log(error);
});
};
export const signOutUser = async () => {
signOut(auth);
};
export const checkNewuser = async () => {
if (auth.currentUser) {
const docRef = doc(db, "users", auth.currentUser.uid);
const docSnap = await getDoc(docRef);
return !docSnap.exists();
}
};
export const getUserInfo = async () => {
if (auth.currentUser) {
const docRef = doc(db, "users", auth.currentUser.uid);
const docSnap = await getDoc(docRef);
return docSnap.data();
}
};
// use this when you need user information on a certain page/component
// gets called when user is signed in
// use getAuth to get auth object
onAuthStateChanged(auth, (user) => {
try {
checkNewuser().then((u) => {
if (u) {
const userData = {
email: user.email,
uid: user.uid,
profile_picture: user.photoURL,
displayName: user.displayName,
age: 0,
city: "",
bio: "",
rating: 0,
awards: [],
genrePreferences: "",
isNewUser: true,
};
setDoc(doc(db, "users", user.uid), userData);
}
});
} catch (error) {
console.log(error);
}
});
export const updateUser = async (userData) => {
const userRef = doc(db, "users", auth.currentUser.uid);
await updateDoc(userRef, userData);
};
export default app;