207 lines
7.1 KiB
JavaScript
207 lines
7.1 KiB
JavaScript
|
|
// IMPORTANT: Replace 'YOUR_APP_ID' with your actual Userbase App ID.
|
|
// You can find this in your Userbase dashboard.
|
|
const APP_ID = '7cd8e25b-723d-4af7-8bdf-ef558bd0dfcc';
|
|
|
|
// Initialize Userbase SDK
|
|
try {
|
|
userbase.init({ appId: APP_ID });
|
|
console.log('Userbase SDK initialized successfully on index page.');
|
|
} catch (e) {
|
|
console.error('Failed to initialize Userbase SDK on index page:', e);
|
|
alert('Failed to initialize Userbase SDK. Check your App ID and console for errors.');
|
|
}
|
|
|
|
// --- DOM Elements ---
|
|
const authSection = document.getElementById('auth-section');
|
|
const forgotPasswordSection = document.getElementById('forgot-password-section');
|
|
const loggedInActions = document.getElementById('logged-in-actions');
|
|
|
|
// Signup form
|
|
const signupForm = document.getElementById('signup-form');
|
|
const signupUsernameInput = document.getElementById('signup-username');
|
|
const signupEmailInput = document.getElementById('signup-email');
|
|
const signupPasswordInput = document.getElementById('signup-password');
|
|
const signupMessage = document.getElementById('signup-message');
|
|
|
|
// Login form
|
|
const loginForm = document.getElementById('login-form');
|
|
const loginUsernameInput = document.getElementById('login-username');
|
|
const loginPasswordInput = document.getElementById('login-password');
|
|
const loginMessage = document.getElementById('login-message');
|
|
const goToProfileButton = document.getElementById('go-to-profile-button');
|
|
const logoutButtonMainPage = document.getElementById('logout-button-main-page');
|
|
|
|
|
|
// Forgot password
|
|
const forgotPasswordLink = document.getElementById('forgot-password-link');
|
|
const forgotPasswordForm = document.getElementById('forgot-password-form');
|
|
const forgotUsernameInput = document.getElementById('forgot-username');
|
|
const forgotPasswordMessage = document.getElementById('forgot-password-message');
|
|
const backToLoginLink = document.getElementById('back-to-login-link');
|
|
|
|
|
|
// --- Helper Functions ---
|
|
function displayMessage(element, message, type) {
|
|
element.textContent = message;
|
|
element.className = `message ${type}`;
|
|
}
|
|
|
|
function clearMessages() {
|
|
[signupMessage, loginMessage, forgotPasswordMessage].forEach(el => {
|
|
el.textContent = '';
|
|
el.className = 'message';
|
|
});
|
|
}
|
|
|
|
function showAuthSection() {
|
|
authSection.style.display = 'block';
|
|
forgotPasswordSection.style.display = 'none';
|
|
loggedInActions.style.display = 'none'; // Hide logged-in actions
|
|
clearMessages();
|
|
// Clear form fields
|
|
signupForm.reset();
|
|
loginForm.reset();
|
|
forgotPasswordForm.reset();
|
|
}
|
|
|
|
function showLoggedInActions() {
|
|
authSection.style.display = 'block'; // Keep login/signup forms visible for now, but hide them in practice
|
|
loggedInActions.style.display = 'block'; // Show "Go to Profile" and "Logout"
|
|
signupForm.style.display = 'none';
|
|
loginForm.style.display = 'none';
|
|
clearMessages();
|
|
}
|
|
|
|
|
|
function showForgotPasswordSection() {
|
|
authSection.style.display = 'none';
|
|
forgotPasswordSection.style.display = 'block';
|
|
clearMessages();
|
|
forgotPasswordForm.reset();
|
|
}
|
|
|
|
// --- Event Handlers ---
|
|
|
|
// Check if user is already logged in on page load
|
|
userbase.getSession()
|
|
.then(session => {
|
|
if (session.user) {
|
|
console.log('User already logged in. Redirecting to profile page.');
|
|
window.location.href = 'profile.html'; // Redirect to profile page
|
|
} else {
|
|
console.log('No active session.');
|
|
showAuthSection();
|
|
}
|
|
})
|
|
.catch(e => {
|
|
console.error('Error getting session:', e);
|
|
showAuthSection(); // Default to auth section on error
|
|
});
|
|
|
|
// Signup
|
|
signupForm.addEventListener('submit', async (e) => {
|
|
e.preventDefault();
|
|
clearMessages();
|
|
const username = signupUsernameInput.value;
|
|
const password = signupPasswordInput.value;
|
|
const email = signupEmailInput.value || undefined; // Pass undefined if empty for optional email
|
|
|
|
try {
|
|
const user = await userbase.signUp({
|
|
username,
|
|
password,
|
|
email,
|
|
profile: {
|
|
// You can add other initial profile data here if needed during signup
|
|
}
|
|
});
|
|
displayMessage(signupMessage, `Signup successful! Welcome, ${user.username}. Redirecting to profile...`, 'success');
|
|
setTimeout(() => {
|
|
window.location.href = 'profile.html'; // Redirect after a short delay
|
|
}, 1500);
|
|
} catch (e) {
|
|
console.error('Signup failed:', e);
|
|
displayMessage(signupMessage, `Signup failed: ${e.message}`, 'error');
|
|
}
|
|
});
|
|
|
|
// Login
|
|
loginForm.addEventListener('submit', async (e) => {
|
|
e.preventDefault();
|
|
clearMessages();
|
|
const username = loginUsernameInput.value;
|
|
const password = loginPasswordInput.value;
|
|
|
|
try {
|
|
const user = await userbase.signIn({ username, password });
|
|
displayMessage(loginMessage, `Login successful! Welcome, ${user.username}. Redirecting to profile...`, 'success');
|
|
setTimeout(() => {
|
|
window.location.href = 'profile.html'; // Redirect after a short delay
|
|
}, 1500);
|
|
} catch (e) {
|
|
console.error('Login failed:', e);
|
|
displayMessage(loginMessage, `Login failed: ${e.message}`, 'error');
|
|
}
|
|
});
|
|
|
|
// Logout from main page button (if user logs in and then logs out without going to profile)
|
|
logoutButtonMainPage.addEventListener('click', async () => {
|
|
clearMessages();
|
|
try {
|
|
await userbase.signOut();
|
|
console.log('Logged out successfully from main page.');
|
|
displayMessage(loginMessage, 'You have been logged out.', 'success');
|
|
showAuthSection();
|
|
} catch (e) {
|
|
console.error('Logout failed:', e);
|
|
displayMessage(loginMessage, `Logout failed: ${e.message}`, 'error');
|
|
}
|
|
});
|
|
|
|
|
|
// Go to Profile button
|
|
goToProfileButton.addEventListener('click', () => {
|
|
window.location.href = 'profile.html';
|
|
});
|
|
|
|
|
|
// Forgot Password link
|
|
forgotPasswordLink.addEventListener('click', (e) => {
|
|
e.preventDefault();
|
|
showForgotPasswordSection();
|
|
});
|
|
|
|
// Back to Login link
|
|
backToLoginLink.addEventListener('click', (e) => {
|
|
e.preventDefault();
|
|
showAuthSection();
|
|
});
|
|
|
|
// Forgot Password form submission
|
|
forgotPasswordForm.addEventListener('submit', async (e) => {
|
|
e.preventDefault();
|
|
clearMessages();
|
|
const username = forgotUsernameInput.value;
|
|
|
|
try {
|
|
await userbase.forgotPassword({ username });
|
|
displayMessage(forgotPasswordMessage, 'A temporary password has been sent to your email address.', 'success');
|
|
forgotPasswordForm.reset();
|
|
} catch (e) {
|
|
console.error('Forgot password failed:', e);
|
|
displayMessage(forgotPasswordMessage, `Forgot password failed: ${e.message}`, 'error');
|
|
}
|
|
});
|
|
|
|
// Listener for session changes (e.g., if a session expires or user logs in/out in another tab)
|
|
userbase.onUpdate((session) => {
|
|
if (session.user) {
|
|
console.log('User session updated on index page:', session.user);
|
|
window.location.href = 'profile.html'; // Redirect if session starts in another tab
|
|
} else {
|
|
console.log('User session ended on index page.');
|
|
showAuthSection(); // Show auth forms if session ends
|
|
}
|
|
});
|