121 lines
3.7 KiB
HTML
121 lines
3.7 KiB
HTML
<!--
|
|
Author: Wai Lam
|
|
Date: 7/2/25
|
|
Description: login
|
|
-->
|
|
<html>
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
</head>
|
|
<body>
|
|
<h1>Login</h1>
|
|
<div>
|
|
<form>
|
|
<div>
|
|
<label for="email">Email</label>
|
|
<input type="text" id="email" />
|
|
</div>
|
|
<div>
|
|
<label for="password">Password</label>
|
|
<input type="password" id="password" />
|
|
</div>
|
|
|
|
<div id="errorMessage" class="hidden text-red-500">
|
|
An error occurred.
|
|
</div>
|
|
<div id="userStatus" class="hidden text-green-500"></div>
|
|
|
|
<div>
|
|
<button type="button" id="loginButton">Login</button>
|
|
</div>
|
|
<div>
|
|
<button type="button" id="googleSignInButton">
|
|
Sign in with Google
|
|
</button>
|
|
</div>
|
|
<div>
|
|
<a href="SignUp.html">Sign Up</a>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
|
|
<script type="module">
|
|
import { initializeApp } from "https://www.gstatic.com/firebasejs/11.3.0/firebase-app.js";
|
|
import { firebaseConfig } from "./firebase-config.js";
|
|
import {
|
|
getAuth,
|
|
signInWithEmailAndPassword,
|
|
onAuthStateChanged,
|
|
GoogleAuthProvider,
|
|
signInWithPopup,
|
|
signOut,
|
|
} from "https://www.gstatic.com/firebasejs/11.3.0/firebase-auth.js";
|
|
|
|
const app = initializeApp(firebaseConfig);
|
|
const auth = getAuth();
|
|
|
|
document.getElementById("loginButton").onclick = login;
|
|
document.getElementById("googleSignInButton").onclick = signInWithGoogle;
|
|
|
|
const userStatusDiv = document.getElementById("userStatus");
|
|
const errorMessageDiv = document.getElementById("errorMessage");
|
|
|
|
// Sign out any existing user on page load to prevent auto sign-in
|
|
signOut(auth);
|
|
|
|
onAuthStateChanged(auth, (user) => {
|
|
if (user) {
|
|
userStatusDiv.innerHTML = `Signed in as: <strong>${
|
|
user.displayName || user.email
|
|
}</strong>`;
|
|
userStatusDiv.classList.remove("hidden");
|
|
} else {
|
|
userStatusDiv.innerHTML = "";
|
|
userStatusDiv.classList.add("hidden");
|
|
}
|
|
});
|
|
|
|
function login() {
|
|
const email = document.getElementById("email").value;
|
|
const password = document.getElementById("password").value;
|
|
|
|
signInWithEmailAndPassword(auth, email, password)
|
|
.then(() => {
|
|
errorMessageDiv.classList.add("hidden");
|
|
})
|
|
.catch((error) => {
|
|
const errorCode = error.code;
|
|
let message = "An error occurred. Please try again.";
|
|
|
|
if (
|
|
errorCode === "auth/wrong-password" ||
|
|
errorCode === "auth/user-not-found"
|
|
) {
|
|
message = "Wrong Email/Password!";
|
|
}
|
|
|
|
errorMessageDiv.innerHTML = `<strong>${message}</strong>`;
|
|
errorMessageDiv.classList.remove("hidden");
|
|
});
|
|
}
|
|
// if you are testing in live server please add that server domain to the authorized domain if not the pop up will not show up
|
|
function signInWithGoogle() {
|
|
const provider = new GoogleAuthProvider();
|
|
provider.setCustomParameters({
|
|
prompt: "select_account", // Forces account selection every time
|
|
});
|
|
|
|
signInWithPopup(auth, provider)
|
|
.then(() => {
|
|
errorMessageDiv.classList.add("hidden");
|
|
})
|
|
.catch(() => {
|
|
errorMessageDiv.innerHTML = `<strong>Google Sign-In failed. Please try again.</strong>`;
|
|
errorMessageDiv.classList.remove("hidden");
|
|
});
|
|
}
|
|
</script>
|
|
</body>
|
|
</html>
|