uchill/front_minimal/src/auth/context/firebase/action.js

89 lines
2.5 KiB
JavaScript

import { doc, setDoc, collection } from 'firebase/firestore';
import {
signOut as _signOut,
signInWithPopup as _signInWithPopup,
GoogleAuthProvider as _GoogleAuthProvider,
GithubAuthProvider as _GithubAuthProvider,
TwitterAuthProvider as _TwitterAuthProvider,
sendEmailVerification as _sendEmailVerification,
sendPasswordResetEmail as _sendPasswordResetEmail,
signInWithEmailAndPassword as _signInWithEmailAndPassword,
createUserWithEmailAndPassword as _createUserWithEmailAndPassword,
} from 'firebase/auth';
import { AUTH, FIRESTORE } from 'src/lib/firebase';
/** **************************************
* Sign in
*************************************** */
export const signInWithPassword = async ({ email, password }) => {
try {
await _signInWithEmailAndPassword(AUTH, email, password);
const user = AUTH.currentUser;
if (!user?.emailVerified) {
throw new Error('Email not verified!');
}
} catch (error) {
console.error('Error during sign in with password:', error);
throw error;
}
};
export const signInWithGoogle = async () => {
const provider = new _GoogleAuthProvider();
await _signInWithPopup(AUTH, provider);
};
export const signInWithGithub = async () => {
const provider = new _GithubAuthProvider();
await _signInWithPopup(AUTH, provider);
};
export const signInWithTwitter = async () => {
const provider = new _TwitterAuthProvider();
await _signInWithPopup(AUTH, provider);
};
/** **************************************
* Sign up
*************************************** */
export const signUp = async ({ email, password, firstName, lastName }) => {
try {
const newUser = await _createUserWithEmailAndPassword(AUTH, email, password);
/*
* (1) If skip emailVerified
* Remove : await _sendEmailVerification(newUser.user);
*/
await _sendEmailVerification(newUser.user);
const userProfile = doc(collection(FIRESTORE, 'users'), newUser.user?.uid);
await setDoc(userProfile, {
uid: newUser.user?.uid,
email,
displayName: `${firstName} ${lastName}`,
});
} catch (error) {
console.error('Error during sign up:', error);
throw error;
}
};
/** **************************************
* Sign out
*************************************** */
export const signOut = async () => {
await _signOut(AUTH);
};
/** **************************************
* Reset password
*************************************** */
export const sendPasswordResetEmail = async ({ email }) => {
await _sendPasswordResetEmail(AUTH, email);
};