diff --git a/dashboard/src/app/page.tsx b/dashboard/src/app/page.tsx index 8fbe383..3d3dd10 100644 --- a/dashboard/src/app/page.tsx +++ b/dashboard/src/app/page.tsx @@ -1,52 +1,15 @@ -'use client'; +'use server'; -import React, { useCallback, useEffect, useState } from 'react'; -import { kratos, LogoutLink } from '@/ory'; -import { useRouter } from 'next/navigation'; +import React from 'react'; import { ThemeToggle } from '@/components/themeToggle'; -import { Session } from '@ory/client'; -import { LogOut } from 'lucide-react'; -import { Button } from '@/components/ui/button'; - -export default function Page() { - - const router = useRouter(); - - const [session, setSession] = useState(); - const loadSession = useCallback(async () => { - console.log(kratos.toSession()); - return kratos.toSession(); - }, [router]); - - useEffect(() => { - - if (session) { - return; - } - - loadSession() - .then((response) => { - console.log(response.data); - response.data && setSession(response.data); - }) - .catch(() => { - const authentication_url = process.env.NEXT_PUBLIC_AUTHENTICATION_NODE_URL; - const dashboard_url = process.env.NEXT_PUBLIC_AUTHENTICATION_NODE_URL; - authentication_url && dashboard_url && - router.push(authentication_url + '/flow/login?return_to=' + dashboard_url); - }); - - }, [router, session]); - - const onLogout = LogoutLink(); +import { LogoutButton } from '@/components/auth/logout'; +export default async function Page() { return (
- +
); diff --git a/dashboard/src/components/auth/logout.tsx b/dashboard/src/components/auth/logout.tsx new file mode 100644 index 0000000..9c34c87 --- /dev/null +++ b/dashboard/src/components/auth/logout.tsx @@ -0,0 +1,16 @@ +'use client'; + +import { LogOut } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { LogoutLink } from '@/ory'; + +export function LogoutButton() { + + const onLogout = LogoutLink(); + + return ( + + ); +} diff --git a/dashboard/src/middleware.ts b/dashboard/src/middleware.ts new file mode 100644 index 0000000..7bfb759 --- /dev/null +++ b/dashboard/src/middleware.ts @@ -0,0 +1,33 @@ +import { NextResponse } from 'next/server'; +import { getFrontendApi } from '@/ory/sdk/hydra'; +import { cookies } from 'next/headers'; + +export async function middleware() { + + const api = await getFrontendApi(); + const cookie = await cookies(); + + const session = await api + .toSession({ cookie: 'ory_kratos_session=' + cookie.get('ory_kratos_session')?.value }) + .then((response) => response.data) + .catch(() => null); + + if (!session) { + + console.log('NO SESSION'); + + const url = process.env.NEXT_PUBLIC_AUTHENTICATION_NODE_URL + + '/flow/login?return_to=' + + process.env.NEXT_PUBLIC_DASHBOARD_NODE_URL; + + console.log('REDIRECT TO', url); + + return NextResponse.redirect(url); + } + + return NextResponse.next(); +} + +export const config = { + matcher: '/((?!api|_next/static|_next/image|favicon.png|sitemap.xml|robots.txt).*)', +};