```import type {NextRequest} from 'next/server' im...
# talk-kratos
m
Copy code
import type {NextRequest} from 'next/server'
import {NextResponse} from 'next/server'
import {edgeConfig} from "@ory/integrations/next"
import {Configuration, FrontendApi} from "@ory/client"
import store from "@/redux/store";
import {setSessionData} from "@/redux/sessionSlice";

const ory = new FrontendApi(new Configuration(edgeConfig))

// This function can be marked `async` if using `await` inside
export async function middleware(request: NextRequest) {
    try{
        if (request.nextUrl.pathname === `/`) {
            return NextResponse.redirect(`${process.env.SERVER_URL}${edgeConfig.basePath}/ui/login`)
        }
        const session : any = await ory.toSession()
        if (session.active) {
            const dispatch = store.dispatch
            dispatch(setSessionData({
                sessionId: session.id,
                userEmail: session.identity.traits.email,
                logoutUrl: session.logoutUrl
            }))
            return NextResponse.next()
        }
    }catch (e) {
        console.log("No session detected, redirecting to login")
    }

    return NextResponse.rewrite(`${process.env.SERVER_URL}${edgeConfig.basePath}/ui/login`)
}

// Protected routes
export const config = {
    matcher: [
        "/",
        "/dashboard",
    ],
}