link-stack/apps/link/app/_components/CSRFProvider.tsx

23 lines
633 B
TypeScript
Raw Normal View History

"use client";
import { FC, PropsWithChildren, useEffect } from "react";
import { useSession } from "next-auth/react";
export const CSRFProvider: FC<PropsWithChildren> = ({ children }) => {
const { data: session, status, update } = useSession();
useEffect(() => {
const interval = setInterval(async () => {
if (status === "authenticated") {
const response = await fetch("/api/v1/users/me");
const token = response.headers.get("CSRF-Token");
update({ csrfToken: token });
}
}, 30000);
return () => clearInterval(interval);
}, [session, status, update]);
return children;
};