|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import React, { useState } from 'react'; |
|
|
import auth from '../../utils/firebase'; |
|
|
import { signInWithPopup, GoogleAuthProvider } from "firebase/auth"; |
|
|
import './styles.css'; |
|
|
|
|
|
export const sendTokenToServer = async (token) => { |
|
|
|
|
|
const scheme = window.location.protocol; |
|
|
var currentHost = window.location.host; |
|
|
var parts = currentHost.split(':'); |
|
|
var ipAddress = parts[0]; |
|
|
var newPort = '8000'; |
|
|
var newHost = ipAddress + ':' + newPort; |
|
|
const url = scheme + '//' + newHost; |
|
|
|
|
|
try { |
|
|
const response = await fetch(url, { |
|
|
method: 'POST', |
|
|
headers: { |
|
|
'Content-Type': 'application/json', |
|
|
'Authorization': `Bearer ${token}` |
|
|
} |
|
|
}); |
|
|
|
|
|
if (!response.ok) { |
|
|
console.error("Sent token failed"); |
|
|
} |
|
|
} catch (error) { |
|
|
console.error("Sent token failed. ", error); |
|
|
} |
|
|
} |
|
|
|
|
|
export const signInWithGoogle = async (isLoggedIn, setToken) => { |
|
|
const provider = new GoogleAuthProvider(); |
|
|
return signInWithPopup(auth, provider) |
|
|
.then(async (result) => { |
|
|
|
|
|
const credential = GoogleAuthProvider.credentialFromResult(result); |
|
|
const token = await auth.currentUser.getIdToken(); |
|
|
|
|
|
|
|
|
const user = result.user; |
|
|
isLoggedIn.current = true; |
|
|
setToken(token); |
|
|
await sendTokenToServer(token); |
|
|
|
|
|
console.log("Sign-in successfully"); |
|
|
}).catch((error) => { |
|
|
|
|
|
const errorCode = error.code; |
|
|
const errorMessage = error.message; |
|
|
console.error(`Error occurred during sign in. Code: ${errorCode}, Message: ${errorMessage}`); |
|
|
|
|
|
const email = error.customData.email; |
|
|
|
|
|
const credential = GoogleAuthProvider.credentialFromError(error); |
|
|
isLoggedIn.current = false; |
|
|
}); |
|
|
} |
|
|
|
|
|
const SignIn = ({ isLoggedIn, setToken }) => { |
|
|
const [isLoading, setIsLoading] = useState(false); |
|
|
|
|
|
const signIn = async (e) => { |
|
|
e.preventDefault(); |
|
|
setIsLoading(true); |
|
|
try { |
|
|
await signInWithGoogle(isLoggedIn, setToken); |
|
|
} catch (error) { |
|
|
console.error('Error during sign in:', error); |
|
|
} |
|
|
setIsLoading(false); |
|
|
} |
|
|
|
|
|
return ( |
|
|
<form onSubmit={signIn}> |
|
|
<button type="submit" disabled={isLoading} className="auth-btn" > |
|
|
{isLoading ? "Signing In..." : "Sign in"} |
|
|
</button> |
|
|
</form> |
|
|
) |
|
|
} |
|
|
|
|
|
export default SignIn; |