diff --git a/src/pages/Configuracoes.tsx b/src/pages/Configuracoes.tsx index 9eda431..4b27808 100644 --- a/src/pages/Configuracoes.tsx +++ b/src/pages/Configuracoes.tsx @@ -1,3 +1,4 @@ + import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs"; import MeuCadastroForm from "@/components/settings/MeuCadastroForm"; import { useState } from "react"; @@ -29,8 +30,18 @@ const Configuracoes = () => { const handleSubscribe = async () => { setIsSubscribing(true); try { - // A edge function buscará o e-mail do usuário a partir da sessão de autenticação. - const { data, error } = await supabase.functions.invoke('mercado-pago-subscribe'); + const userEmail = localStorage.getItem('userEmail'); + const userId = localStorage.getItem('userId'); + + if (!userEmail || !userId) { + toast.error("Sessão inválida. Por favor, faça login novamente."); + setIsSubscribing(false); + return; + } + + const { data, error } = await supabase.functions.invoke('mercado-pago-subscribe', { + body: { email: userEmail, userId: userId }, + }); if (error) { // Lida com erros de rede ou falhas na invocação da função. diff --git a/supabase/functions/mercado-pago-subscribe/index.ts b/supabase/functions/mercado-pago-subscribe/index.ts index 993662a..65b1ba6 100644 --- a/supabase/functions/mercado-pago-subscribe/index.ts +++ b/supabase/functions/mercado-pago-subscribe/index.ts @@ -14,23 +14,39 @@ serve(async (req) => { } try { - // Cria um cliente Supabase com o contexto de autenticação do usuário logado. - const supabaseClient = createClient( + const { email, userId } = await req.json(); + + if (!email || !userId) { + return new Response(JSON.stringify({ error: 'E-mail ou ID do usuário não fornecido.' }), { + headers: { ...corsHeaders, 'Content-Type': 'application/json' }, + status: 400, + }); + } + + // Cria um cliente Supabase com a service_role_key para verificar o usuário + const supabaseAdmin = createClient( Deno.env.get('SUPABASE_URL') ?? '', - Deno.env.get('SUPABASE_ANON_KEY') ?? '', - { global: { headers: { Authorization: req.headers.get('Authorization')! } } } - ) + Deno.env.get('SUPABASE_SERVICE_ROLE_KEY') ?? '', + { auth: { persistSession: false } } + ); + + // Verifica se o usuário existe no banco de dados + const { data: userData, error: userError } = await supabaseAdmin + .from('usuarios') + .select('id') + .eq('id', userId) + .eq('email', email) + .single(); - // Obtém o usuário a partir da sessão - const { data: { user } } = await supabaseClient.auth.getUser() - - if (!user || !user.email) { - return new Response(JSON.stringify({ error: 'Usuário não autenticado ou e-mail não encontrado.' }), { + if (userError || !userData) { + console.error('Falha na verificação do usuário:', userError); + return new Response(JSON.stringify({ error: 'Usuário não autorizado.' }), { headers: { ...corsHeaders, 'Content-Type': 'application/json' }, status: 401, - }) + }); } + const MERCADO_PAGO_ACCESS_TOKEN = Deno.env.get('MERCADO_PAGO_ACCESS_TOKEN') if (!MERCADO_PAGO_ACCESS_TOKEN) { return new Response(JSON.stringify({ error: 'Chave de acesso do Mercado Pago não configurada no servidor.' }), { @@ -48,7 +64,7 @@ serve(async (req) => { currency_id: "BRL" }, back_url: req.headers.get("origin") || "http://localhost:5173/configuracoes", - payer_email: user.email + payer_email: email }; const mpResponse = await fetch("https://api.mercadopago.com/preapproval", { @@ -83,4 +99,3 @@ serve(async (req) => { }) } }) -