Acceso a Conseller SaaS
body { font-family: 'Roboto', sans-serif; }
.form-input {
border-radius: 30px !important;
border: 1px solid #d1d5db;
padding: 0.75rem 1.25rem;
transition: all 0.2s ease-in-out;
}
.form-input:focus {
--tw-ring-color: #a020f0;
border-color: #a020f0;
box-shadow: 0 0 0 2px var(--tw-ring-color);
}
.btn-primary {
border-radius: 30px !important;
background-color: #a020f0 !important;
color: #ffffff !important;
padding: 0.75rem 1.5rem;
font-weight: 700;
transition: background-color 0.2s;
}
.btn-primary:hover {
background-color: #7a15cc !important;
}
Crear Cuenta
Empieza tu prueba gratuita de 30 días.
¿Ya tienes una cuenta? Inicia sesión
Restablecer Contraseña
Ingresa tu correo y te enviaremos un enlace para restablecerla.
Volver a inicio de sesión
// Importa las funciones que necesitas de los SDKs
import { initializeApp } from "https://www.gstatic.com/firebasejs/11.6.1/firebase-app.js";
import {
getAuth,
createUserWithEmailAndPassword,
signInWithEmailAndPassword,
onAuthStateChanged,
sendPasswordResetEmail
} from "https://www.gstatic.com/firebasejs/11.6.1/firebase-auth.js";
import { getFirestore, doc, setDoc, serverTimestamp, collection } from "https://www.gstatic.com/firebasejs/11.6.1/firebase-firestore.js";
// Tu configuración de Firebase
const firebaseConfig = {
apiKey: "AIzaSyDItcChmC_MCf424oYXCA-BZ0EnM4thAsA",
authDomain: "conseller-crm.firebaseapp.com",
projectId: "conseller-crm",
storageBucket: "conseller-crm.firebasestorage.app",
messagingSenderId: "878861223640",
appId: "1:878861223640:web:024d87a0d79014c46cf9ad",
measurementId: "G-Z06W4NBZ4B"
};
// Initialize Firebase
const app = initializeApp(firebaseConfig);
const auth = getAuth(app);
const db = getFirestore(app);
// DOM Elements
const loginView = document.getElementById('login-view');
const registerView = document.getElementById('register-view');
const resetView = document.getElementById('reset-view');
// View Toggles
document.getElementById('show-register').addEventListener('click', () => {
loginView.classList.add('hidden');
resetView.classList.add('hidden');
registerView.classList.remove('hidden');
});
document.getElementById('show-login').addEventListener('click', () => {
registerView.classList.add('hidden');
resetView.classList.add('hidden');
loginView.classList.remove('hidden');
});
document.getElementById('show-reset').addEventListener('click', () => {
loginView.classList.add('hidden');
registerView.classList.add('hidden');
resetView.classList.remove('hidden');
});
document.getElementById('back-to-login').addEventListener('click', () => {
resetView.classList.add('hidden');
registerView.classList.add('hidden');
loginView.classList.remove('hidden');
});
// Redirect if user is already logged in
onAuthStateChanged(auth, user => {
if (user) {
// Si el usuario ya está autenticado, lo redirige al dashboard.
// Asegúrate de que el nombre del archivo coincida.
window.location.href = 'dashboard.html';
}
});
// Login Logic
document.getElementById('login-form').addEventListener('submit', async (e) => {
e.preventDefault();
const email = document.getElementById('login-email').value;
const password = document.getElementById('login-password').value;
const messageEl = document.getElementById('login-message');
try {
await signInWithEmailAndPassword(auth, email, password);
// La redirección se maneja con onAuthStateChanged
} catch (error) {
console.error("Error de inicio de sesión:", error.message);
messageEl.textContent = "Correo o contraseña incorrectos.";
}
});
// Register Logic
document.getElementById('register-form').addEventListener('submit', async (e) => {
e.preventDefault();
const companyName = document.getElementById('register-company').value;
const email = document.getElementById('register-email').value;
const password = document.getElementById('register-password').value;
const messageEl = document.getElementById('register-message');
try {
const userCredential = await createUserWithEmailAndPassword(auth, email, password);
const user = userCredential.user;
// 1. Crear el documento de la compañía
const companyRef = doc(collection(db, "companies"));
const trialEndDate = new Date();
trialEndDate.setDate(trialEndDate.getDate() + 30);
await setDoc(companyRef, {
companyName: companyName,
ownerId: user.uid,
createdAt: serverTimestamp(),
subscription: {
plan: 'trial',
status: 'active',
trialEndDate: trialEndDate.toISOString()
}
});
// 2. Crear el documento del usuario y vincularlo a la compañía
await setDoc(doc(db, "users", user.uid), {
email: user.email,
companyId: companyRef.id,
role: 'admin' // El primer usuario es siempre el admin
});
// Redirección se maneja con onAuthStateChanged
} catch (error) {
console.error("Error de registro:", error.message);
if (error.code === 'auth/email-already-in-use') {
messageEl.textContent = "Este correo electrónico ya está en uso.";
} else {
messageEl.textContent = "Error al crear la cuenta.";
}
}
});
// Password Reset Logic
document.getElementById('reset-form').addEventListener('submit', async (e) => {
e.preventDefault();
const email = document.getElementById('reset-email').value;
const messageEl = document.getElementById('reset-message');
try {
await sendPasswordResetEmail(auth, email);
messageEl.textContent = "¡Revisa tu correo! Te hemos enviado un enlace para restablecer tu contraseña.";
messageEl.className = "mt-4 text-center text-green-600";
} catch (error) {
console.error("Error al enviar correo de reseteo:", error.message);
messageEl.textContent = "No se pudo enviar el correo. Verifica que la dirección sea correcta.";
messageEl.className = "mt-4 text-center text-red-500";
}
});