Cree un login y register con astro, tengo ya funcional incluso el guardado de las cookies y mas pero todo el problema es que cuando pongo la condicional para permirtir que paginas redirigir al iniciar sesion o si inicio sesion a cual pagina mandar
te dejare los codigos de inicio sesion primero quiero que revises si algo mal antes de mostrarte las condicionales:
create-session.ts:
import { app } from "@/firebase/server";
import { getAuth } from "firebase-admin/auth";
import type { APIRoute } from "astro";
export const POST: APIRoute = async ({ request, cookies }) => {
const auth = getAuth(app);
const idToken = request.headers.get("Authorization")?.split("Bearer ")[1];
if (!idToken) {
return new Response("Token no encontrado", { status: 401 });
}
try {
await auth.verifyIdToken(idToken);
} catch (error) {
return new Response("Token inválido", { status: 401 });
}
const fiveDays = 60 * 60 * 24 * 5 * 1000;
const sessionCookie = await auth.createSessionCookie(idToken, {
expiresIn: fiveDays,
});
cookies.set("__session", sessionCookie, {
path: "/",
});
return new Response(null, { status: 200 });
};
singin.ts:
import { actions } from "astro:actions";
import { isInputError } from "astro:actions";
const form_login = document.querySelector("#login-account-form") as HTMLFormElement;
form_login.addEventListener("submit", async (e) => {
e.preventDefault();
const { error, data } = await actions.loginAccount.safe(new FormData(form_login));
if (error) {
console.error(error);
if (isInputError(error)) {
console.error("Input error:", error);
}
return;
}
const idToken = data.idToken;
const response = await fetch('/api/create-session', {
method: 'POST',
headers: {
'Authorization': Bearer ${idToken}
}});
if (response.ok) {
window.location.href = "/auth/true/dashboard";
} else {
console.error('Error al crear la sesión');
}})