Fix: Edge Function non-2xx status code
The "Assinar Agora" button was not working, returning a non-2xx status code.
This commit is contained in:
parent
de3dc3363f
commit
f91efb3823
@ -1,3 +1,4 @@
|
|||||||
|
|
||||||
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs";
|
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@/components/ui/tabs";
|
||||||
import MeuCadastroForm from "@/components/settings/MeuCadastroForm";
|
import MeuCadastroForm from "@/components/settings/MeuCadastroForm";
|
||||||
import { useState } from "react";
|
import { useState } from "react";
|
||||||
@ -29,8 +30,18 @@ const Configuracoes = () => {
|
|||||||
const handleSubscribe = async () => {
|
const handleSubscribe = async () => {
|
||||||
setIsSubscribing(true);
|
setIsSubscribing(true);
|
||||||
try {
|
try {
|
||||||
// A edge function buscará o e-mail do usuário a partir da sessão de autenticação.
|
const userEmail = localStorage.getItem('userEmail');
|
||||||
const { data, error } = await supabase.functions.invoke('mercado-pago-subscribe');
|
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) {
|
if (error) {
|
||||||
// Lida com erros de rede ou falhas na invocação da função.
|
// Lida com erros de rede ou falhas na invocação da função.
|
||||||
|
|||||||
@ -14,23 +14,39 @@ serve(async (req) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Cria um cliente Supabase com o contexto de autenticação do usuário logado.
|
const { email, userId } = await req.json();
|
||||||
const supabaseClient = createClient(
|
|
||||||
|
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_URL') ?? '',
|
||||||
Deno.env.get('SUPABASE_ANON_KEY') ?? '',
|
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY') ?? '',
|
||||||
{ global: { headers: { Authorization: req.headers.get('Authorization')! } } }
|
{ 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
|
if (userError || !userData) {
|
||||||
const { data: { user } } = await supabaseClient.auth.getUser()
|
console.error('Falha na verificação do usuário:', userError);
|
||||||
|
return new Response(JSON.stringify({ error: 'Usuário não autorizado.' }), {
|
||||||
if (!user || !user.email) {
|
|
||||||
return new Response(JSON.stringify({ error: 'Usuário não autenticado ou e-mail não encontrado.' }), {
|
|
||||||
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
headers: { ...corsHeaders, 'Content-Type': 'application/json' },
|
||||||
status: 401,
|
status: 401,
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const MERCADO_PAGO_ACCESS_TOKEN = Deno.env.get('MERCADO_PAGO_ACCESS_TOKEN')
|
const MERCADO_PAGO_ACCESS_TOKEN = Deno.env.get('MERCADO_PAGO_ACCESS_TOKEN')
|
||||||
if (!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.' }), {
|
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"
|
currency_id: "BRL"
|
||||||
},
|
},
|
||||||
back_url: req.headers.get("origin") || "http://localhost:5173/configuracoes",
|
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", {
|
const mpResponse = await fetch("https://api.mercadopago.com/preapproval", {
|
||||||
@ -83,4 +99,3 @@ serve(async (req) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user