Fix: Enforce profile completion and webhook trigger
The user reported that the app allows navigation without completing the profile (Name, WhatsApp) after Google login, and the N8N webhook is not triggered. This commit addresses these issues by ensuring the `/complete-profile` page is shown until the required data is provided, and the `sendNewUserWebhook` is called after successful profile completion.
This commit is contained in:
parent
9427d396b6
commit
4950dae761
@ -24,8 +24,26 @@ const ProtectedRoute = ({ children }: ProtectedRouteProps) => {
|
||||
const { isChecking } = useProfileCompletion(session?.user?.email || '');
|
||||
|
||||
useEffect(() => {
|
||||
// Verificar sessão inicial
|
||||
supabase.auth.getSession().then(({ data: { session } }) => {
|
||||
console.log('🔐 Sessão inicial:', session?.user?.email);
|
||||
setSession(session);
|
||||
setLoggedIn(!!session);
|
||||
setUser(session?.user ? { id: session.user.id } : null);
|
||||
|
||||
if (session?.user?.email) {
|
||||
localStorage.setItem('userEmail', session.user.email);
|
||||
} else {
|
||||
localStorage.removeItem('userEmail');
|
||||
}
|
||||
|
||||
setIsLoading(false);
|
||||
});
|
||||
|
||||
// Listener para mudanças de auth
|
||||
const { data: { subscription } } = supabase.auth.onAuthStateChange(
|
||||
(_event, session) => {
|
||||
console.log('🔄 Mudança de auth:', _event, session?.user?.email);
|
||||
setSession(session);
|
||||
setLoggedIn(!!session);
|
||||
setUser(session?.user ? { id: session.user.id } : null);
|
||||
@ -61,6 +79,7 @@ const ProtectedRoute = ({ children }: ProtectedRouteProps) => {
|
||||
|
||||
// Se tem sessão mas perfil não está completo, redirecionar para completar perfil
|
||||
if (session && !isProfileComplete) {
|
||||
console.log('🚨 Redirecionando para complete-profile - perfil incompleto');
|
||||
return <Navigate to="/complete-profile" replace />;
|
||||
}
|
||||
|
||||
|
||||
@ -27,9 +27,22 @@ export const useProfileCompletion = (userEmail: string) => {
|
||||
console.error('❌ Erro ao verificar perfil:', error);
|
||||
setProfileComplete(false);
|
||||
} else if (usuario) {
|
||||
// Verificar se tem nome e whatsapp preenchidos
|
||||
const isComplete = !!(usuario.nome?.trim() && usuario.whatsapp?.trim());
|
||||
console.log('📋 Perfil completo:', isComplete, { nome: usuario.nome, whatsapp: usuario.whatsapp });
|
||||
// Verificar se tem nome REAL (não placeholder) e whatsapp válido
|
||||
const hasRealName = usuario.nome &&
|
||||
usuario.nome.trim() !== '' &&
|
||||
usuario.nome !== 'Nome não informado';
|
||||
const hasValidWhatsApp = usuario.whatsapp &&
|
||||
usuario.whatsapp.trim() !== '' &&
|
||||
usuario.whatsapp !== '00000000000' &&
|
||||
usuario.whatsapp.length >= 10;
|
||||
|
||||
const isComplete = hasRealName && hasValidWhatsApp;
|
||||
console.log('📋 Perfil completo:', isComplete, {
|
||||
nome: usuario.nome,
|
||||
whatsapp: usuario.whatsapp,
|
||||
hasRealName,
|
||||
hasValidWhatsApp
|
||||
});
|
||||
setProfileComplete(isComplete);
|
||||
} else {
|
||||
console.log('👤 Usuário não encontrado na tabela usuarios');
|
||||
|
||||
@ -29,9 +29,13 @@ const CompleteProfile = () => {
|
||||
setUserEmail(user.email || '');
|
||||
setUserId(user.id);
|
||||
|
||||
console.log('👤 Dados do usuário Google:', user.user_metadata);
|
||||
|
||||
// Pre-fill nome if available from Google
|
||||
const displayName = user.user_metadata?.full_name || user.user_metadata?.name || '';
|
||||
if (displayName) {
|
||||
const displayName = user.user_metadata?.full_name ||
|
||||
user.user_metadata?.name ||
|
||||
user.user_metadata?.display_name || '';
|
||||
if (displayName && displayName !== 'Nome não informado') {
|
||||
setNome(displayName);
|
||||
}
|
||||
} else {
|
||||
@ -65,6 +69,7 @@ const CompleteProfile = () => {
|
||||
|
||||
try {
|
||||
console.log('📝 Salvando dados complementares do perfil...');
|
||||
const whatsappOnly = whatsapp.replace(/\D/g, '');
|
||||
|
||||
// Atualizar dados do usuário no Supabase
|
||||
const { error: updateError } = await supabase
|
||||
@ -72,7 +77,7 @@ const CompleteProfile = () => {
|
||||
.update({
|
||||
nome: nome.trim(),
|
||||
empresa: empresa.trim() || null,
|
||||
whatsapp: whatsapp.replace(/\D/g, '')
|
||||
whatsapp: whatsappOnly
|
||||
})
|
||||
.eq('email', userEmail.toLowerCase().trim());
|
||||
|
||||
@ -88,22 +93,24 @@ const CompleteProfile = () => {
|
||||
const webhookSuccess = await sendNewUserWebhook(
|
||||
userEmail,
|
||||
userId,
|
||||
whatsapp.replace(/\D/g, '')
|
||||
whatsappOnly
|
||||
);
|
||||
|
||||
if (webhookSuccess) {
|
||||
console.log('✅ Webhook N8N enviado com sucesso');
|
||||
toast.success("Perfil completado!", {
|
||||
description: "Seus dados foram salvos e seu workspace está sendo configurado.",
|
||||
});
|
||||
} else {
|
||||
console.warn('⚠️ Falha no webhook N8N, mas perfil foi salvo');
|
||||
toast.success("Perfil completado!", {
|
||||
description: "Seus dados foram salvos. A configuração do workspace pode demorar alguns minutos.",
|
||||
});
|
||||
}
|
||||
|
||||
// Marcar perfil como completo
|
||||
setProfileComplete(true);
|
||||
|
||||
toast.success("Perfil completado!", {
|
||||
description: "Seus dados foram salvos e sua conta está ativa.",
|
||||
});
|
||||
|
||||
// Redirecionar para dashboard
|
||||
navigate('/');
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user