- Enable email confirmation. - Implement social login (Google). - Review brute force protection settings.
151 lines
5.2 KiB
TypeScript
151 lines
5.2 KiB
TypeScript
|
|
import { useState } from 'react';
|
|
import { useNavigate } from 'react-router-dom';
|
|
import { Button } from "@/components/ui/button";
|
|
import { formatarWhatsapp } from '@/utils/whatsappFormatter';
|
|
import { validateRegisterForm } from '@/utils/registerValidation';
|
|
import RegisterFormFields from './RegisterFormFields';
|
|
import { supabase } from '@/integrations/supabase/client';
|
|
import { toast } from "sonner";
|
|
import { sendNewUserWebhook } from '@/services/newUserWebhookService';
|
|
|
|
interface RegisterFormProps {
|
|
isLoading: boolean;
|
|
setIsLoading: (isLoading: boolean) => void;
|
|
}
|
|
|
|
const RegisterForm = ({ isLoading, setIsLoading }: RegisterFormProps) => {
|
|
const navigate = useNavigate();
|
|
const [nome, setNome] = useState('');
|
|
const [empresa, setEmpresa] = useState('');
|
|
const [email, setEmail] = useState('');
|
|
const [whatsapp, setWhatsapp] = useState('55');
|
|
const [senha, setSenha] = useState('');
|
|
const [confirmaSenha, setConfirmaSenha] = useState('');
|
|
|
|
const handleCadastro = async (e: React.FormEvent) => {
|
|
e.preventDefault();
|
|
|
|
const validationError = validateRegisterForm({
|
|
nome,
|
|
empresa,
|
|
email,
|
|
whatsapp,
|
|
senha,
|
|
confirmaSenha
|
|
});
|
|
|
|
if (validationError) {
|
|
toast.error("Campos obrigatórios", { description: validationError });
|
|
return;
|
|
}
|
|
|
|
setIsLoading(true);
|
|
|
|
try {
|
|
console.log(`🔐 Iniciando cadastro para: ${email}`);
|
|
|
|
const { data, error } = await supabase.auth.signUp({
|
|
email,
|
|
password: senha,
|
|
options: {
|
|
emailRedirectTo: `${window.location.origin}/email-confirmation`,
|
|
data: {
|
|
nome,
|
|
empresa: empresa || null,
|
|
whatsapp: whatsapp.replace(/\D/g, ''),
|
|
}
|
|
}
|
|
});
|
|
|
|
if (error) {
|
|
console.error('❌ Erro no cadastro Supabase:', error);
|
|
toast.error("Erro no cadastro", {
|
|
description: error.message || "Não foi possível completar o cadastro. Por favor, tente novamente.",
|
|
});
|
|
} else if (data.user) {
|
|
// This condition (empty identities) indicates that the user already exists in Supabase Auth.
|
|
// In this case, `signUp` resends the confirmation/invitation email.
|
|
if (data.user.identities && data.user.identities.length === 0) {
|
|
console.log('👤 Usuário já existe, reenviando confirmação');
|
|
toast.info("E-mail já cadastrado. Verifique sua caixa de entrada!", {
|
|
description: "Enviamos um novo link de confirmação para você ativar sua conta. Não se esqueça de checar a pasta de spam.",
|
|
duration: 10000,
|
|
});
|
|
} else {
|
|
console.log('✅ Novo usuário cadastrado com sucesso');
|
|
|
|
// Send webhook to n8n workflow manager in background
|
|
console.log('📡 Enviando webhook para gerenciador n8n...');
|
|
console.log('📋 Email do usuário:', email);
|
|
console.log('📋 ID do usuário:', data.user.id);
|
|
console.log('📋 WhatsApp do usuário:', whatsapp);
|
|
|
|
// Send webhook in background (don't wait for it)
|
|
sendNewUserWebhook(email, data.user.id, whatsapp.replace(/\D/g, ''))
|
|
.then((success) => {
|
|
if (success) {
|
|
console.log('✅ Webhook enviado com sucesso para n8n');
|
|
} else {
|
|
console.error('❌ Falha no envio do webhook para n8n');
|
|
}
|
|
})
|
|
.catch((error) => {
|
|
console.error('❌ Erro crítico no webhook para n8n:', error);
|
|
});
|
|
|
|
// Show success message and redirect to login
|
|
toast.success("Cadastro realizado com sucesso!", {
|
|
description: "📧 Enviamos um link de confirmação para seu email. Clique no link para ativar sua conta e fazer login.",
|
|
duration: 10000,
|
|
});
|
|
|
|
// Redirect to login page with success message
|
|
navigate('/auth', {
|
|
state: {
|
|
showSuccessMessage: true,
|
|
message: "✅ Cadastro realizado! Verifique seu email e clique no link de confirmação para ativar sua conta."
|
|
}
|
|
});
|
|
}
|
|
}
|
|
} catch (error) {
|
|
console.error('❌ Erro geral durante cadastro:', error);
|
|
toast.error("Erro no cadastro", {
|
|
description: "Ocorreu um erro inesperado. Tente novamente.",
|
|
});
|
|
} finally {
|
|
setIsLoading(false);
|
|
}
|
|
};
|
|
|
|
const handleWhatsappChange = (value: string) => {
|
|
setWhatsapp(formatarWhatsapp(value));
|
|
};
|
|
|
|
return (
|
|
<form onSubmit={handleCadastro} className="space-y-4">
|
|
<RegisterFormFields
|
|
nome={nome}
|
|
setNome={setNome}
|
|
empresa={empresa}
|
|
setEmpresa={setEmpresa}
|
|
email={email}
|
|
setEmail={setEmail}
|
|
whatsapp={whatsapp}
|
|
setWhatsapp={handleWhatsappChange}
|
|
senha={senha}
|
|
setSenha={setSenha}
|
|
confirmaSenha={confirmaSenha}
|
|
setConfirmaSenha={setConfirmaSenha}
|
|
isLoading={isLoading}
|
|
/>
|
|
<Button type="submit" className="w-full" disabled={isLoading}>
|
|
{isLoading ? "Cadastrando..." : "Cadastrar"}
|
|
</Button>
|
|
</form>
|
|
);
|
|
};
|
|
|
|
export default RegisterForm;
|