|
1 | | -import { useState } from 'react'; |
| 1 | +import React, { useState } from 'react'; |
2 | 2 | import Link from 'next/link'; |
3 | | - |
4 | | -import StyledFirebaseAuth from 'react-firebaseui/StyledFirebaseAuth'; |
5 | | -import firebaseApp from 'firebase/app'; |
6 | | -import initFirebase from '@/utils/initFirebase'; |
7 | 3 | import { useEffect } from 'react'; |
8 | 4 |
|
| 5 | +import { getApp } from '@firebase/app'; |
| 6 | +import { |
| 7 | + EmailAuthProvider, |
| 8 | + FacebookAuthProvider, |
| 9 | + getAuth, |
| 10 | + GithubAuthProvider, |
| 11 | + GoogleAuthProvider, |
| 12 | + signInWithEmailAndPassword, |
| 13 | + TwitterAuthProvider, |
| 14 | +} from '@firebase/auth'; |
| 15 | +import * as firebaseui from 'firebaseui'; |
| 16 | +import 'firebaseui/dist/firebaseui.css'; |
| 17 | + |
| 18 | +let ui: firebaseui.auth.AuthUI; |
| 19 | +let uiConfig: firebaseui.auth.Config; |
| 20 | + |
9 | 21 | const FirebaseAuth = ({ full = true }: { full?: boolean }): JSX.Element => { |
10 | | - const [app, setApp] = useState<firebaseApp.app.App>(); |
11 | 22 | const [email, setEmail] = useState(''); |
12 | 23 | const [password, setPassword] = useState(''); |
13 | | - const [ |
14 | | - firebaseAuthConfig, |
15 | | - setFirebaseAuthConfig, |
16 | | - ] = useState<firebaseui.auth.Config>(); |
17 | | - |
18 | | - const setDynamicFirebase = async () => { |
19 | | - const app = await initFirebase(); |
20 | | - if (app) { |
21 | | - setApp(app); |
22 | | - } |
23 | | - }; |
24 | | - |
25 | | - useEffect(() => { |
26 | | - setDynamicFirebase(); |
27 | | - }, []); |
| 24 | + const app = getApp(); |
| 25 | + const auth = getAuth(app); |
28 | 26 |
|
29 | 27 | useEffect(() => { |
30 | | - if (!app) { |
31 | | - return; |
32 | | - } |
33 | 28 | let signInOptions = []; |
34 | 29 | if (full) { |
35 | 30 | signInOptions = [ |
36 | | - firebaseApp.auth.EmailAuthProvider.PROVIDER_ID, |
37 | | - firebaseApp.auth.GoogleAuthProvider.PROVIDER_ID, |
38 | | - firebaseApp.auth.FacebookAuthProvider.PROVIDER_ID, |
39 | | - firebaseApp.auth.TwitterAuthProvider.PROVIDER_ID, |
40 | | - firebaseApp.auth.GithubAuthProvider.PROVIDER_ID, |
| 31 | + EmailAuthProvider.PROVIDER_ID, |
| 32 | + GoogleAuthProvider.PROVIDER_ID, |
| 33 | + FacebookAuthProvider.PROVIDER_ID, |
| 34 | + TwitterAuthProvider.PROVIDER_ID, |
| 35 | + GithubAuthProvider.PROVIDER_ID, |
41 | 36 | 'apple.com', |
42 | 37 | 'microsoft.com', |
43 | 38 | 'yahoo.com', |
44 | 39 | ]; |
45 | 40 | } else { |
46 | 41 | signInOptions = [ |
47 | | - firebaseApp.auth.EmailAuthProvider.PROVIDER_ID, |
48 | | - firebaseApp.auth.GoogleAuthProvider.PROVIDER_ID, |
49 | | - firebaseApp.auth.TwitterAuthProvider.PROVIDER_ID, |
50 | | - firebaseApp.auth.GithubAuthProvider.PROVIDER_ID, |
| 42 | + EmailAuthProvider.PROVIDER_ID, |
| 43 | + GoogleAuthProvider.PROVIDER_ID, |
| 44 | + TwitterAuthProvider.PROVIDER_ID, |
| 45 | + GithubAuthProvider.PROVIDER_ID, |
51 | 46 | ]; |
52 | 47 | } |
53 | 48 |
|
54 | 49 | // https://github.com/firebase/firebaseui-web#configure-oauth-providers |
55 | | - const config: firebaseui.auth.Config = { |
| 50 | + uiConfig = { |
56 | 51 | signInFlow: 'popup', |
57 | 52 | signInOptions, |
58 | 53 | signInSuccessUrl: window.location.href, |
59 | 54 | credentialHelper: 'none', |
60 | | - tosUrl: `${window.location.origin}/terms`, |
| 55 | + tosUrl: `${window.location.origin}/terms-of-use`, |
61 | 56 | // Privacy policy url/callback. |
62 | 57 | privacyPolicyUrl() { |
63 | | - window.open(`${window.location.origin}/privacy`); |
| 58 | + window.open(`${window.location.origin}/privacy-policy`); |
64 | 59 | }, |
65 | 60 | }; |
66 | | - setFirebaseAuthConfig(config); |
67 | | - }, [app, full]); |
| 61 | + checkUi(); |
| 62 | + }, [app, auth, full]); |
68 | 63 |
|
69 | | - function signin(email: string, password: string) { |
70 | | - if (app) { |
71 | | - app |
72 | | - .auth() |
73 | | - .signInWithEmailAndPassword(email, password) |
74 | | - .then(() => { |
75 | | - console.log('Successfully SignedIn'); |
76 | | - }) |
77 | | - .catch((error) => { |
78 | | - console.log(error); |
79 | | - }); |
| 64 | + const checkUi = async () => { |
| 65 | + if (ui) { |
| 66 | + await ui.delete(); |
| 67 | + } |
| 68 | + ui = new firebaseui.auth.AuthUI(auth); |
| 69 | + }; |
| 70 | + |
| 71 | + useEffect(() => { |
| 72 | + if (!ui || !uiConfig) { |
| 73 | + return; |
80 | 74 | } |
| 75 | + ui.start('#firebaseui-auth-container', uiConfig); |
| 76 | + }, [ui, uiConfig]); |
| 77 | + |
| 78 | + function signin(email: string, password: string) { |
| 79 | + signInWithEmailAndPassword(auth, email, password) |
| 80 | + .then(() => { |
| 81 | + console.log('Successfully SignedIn'); |
| 82 | + }) |
| 83 | + .catch((error) => { |
| 84 | + console.log(error); |
| 85 | + }); |
81 | 86 | } |
82 | 87 |
|
83 | 88 | return ( |
@@ -129,13 +134,10 @@ const FirebaseAuth = ({ full = true }: { full?: boolean }): JSX.Element => { |
129 | 134 | </div> |
130 | 135 | ) : ( |
131 | 136 | <> |
132 | | - {app && firebaseAuthConfig ? ( |
133 | | - <div className="grid justify-center"> |
134 | | - <StyledFirebaseAuth |
135 | | - uiConfig={firebaseAuthConfig} |
136 | | - firebaseAuth={app.auth()} |
137 | | - /> |
138 | | - {!full && ( |
| 137 | + <div className="grid justify-center"> |
| 138 | + <div id="firebaseui-auth-container"></div> |
| 139 | + |
| 140 | + {/* {!full && ( |
139 | 141 | <Link href="/user/profile"> |
140 | 142 | <a> |
141 | 143 | <div className="firebaseui-container firebaseui-page-provider-sign-in firebaseui-id-page-provider-sign-in firebaseui-use-spinner"> |
@@ -175,11 +177,8 @@ const FirebaseAuth = ({ full = true }: { full?: boolean }): JSX.Element => { |
175 | 177 | </div> |
176 | 178 | </a> |
177 | 179 | </Link> |
178 | | - )} |
179 | | - </div> |
180 | | - ) : ( |
181 | | - <></> |
182 | | - )} |
| 180 | + )} */} |
| 181 | + </div> |
183 | 182 | </> |
184 | 183 | )} |
185 | 184 | </> |
|
0 commit comments