Next.js Discord

Discord Forum

middleware doesn't let me into route

Unanswered
Pteromalid wasp posted this in #help-forum
Open in Discord
Pteromalid waspOP
goal: if a user logs in and tries to access /auth, the middleware would check if they have a session cookie and verify it in the backend, if it's invalid then let them into /auth, else redirect somewhere else
problem: it does not let me into /auth when the session is invalid

middleware:
import { NextResponse } from "next/server";

export async function middleware(request) {
    console.log('[middleware]')
    const sessionCookie = request.cookies.get('session_cookie');
    const { pathname } = request.nextUrl;
    const referer = request.headers.get('referer') // page user is coming from

    if (sessionCookie && pathname.startsWith('/auth')) {
        try {
            const response = await fetch(`${process.env.NEXT_API_URL}/api/auth/verify_session`, {
                method: 'GET',
                headers: {
                    'Content-Type': 'application/json',
                    'Cookie': `session_cookie=${sessionCookie?.value}`
                },
                credentials: 'include',
            });
            const result = await response.json();
            if (!response.ok || 'error' in result) {                
                const response = NextResponse.next();
                response.headers.set('x-session-state', 'expired');
                return response;
            }

            let redirectUrl = '/';
            [redirect logic...]
            return NextResponse.redirect(new URL(redirectUrl, request.url));
        } catch (error) {
            console.log('--[middleware] - ERROR FETCHING VERIFY SESSION:', error);
        }
    }
    return NextResponse.next();
}

// Routes Middleware should not run on
export const config = {
    matcher: ['/((?!api|_next/static|_next/image|.*\\.png$).*)'],
}

1 Reply

@Pteromalid wasp goal: if a user logs in and tries to access /auth, the middleware would check if they have a session cookie and verify it in the backend, if it's invalid then let them into /auth, else redirect somewhere else problem: it does not let me into /auth when the session is invalid middleware: jsx import { NextResponse } from "next/server"; export async function middleware(request) { console.log('[middleware]') const sessionCookie = request.cookies.get('session_cookie'); const { pathname } = request.nextUrl; const referer = request.headers.get('referer') // page user is coming from if (sessionCookie && pathname.startsWith('/auth')) { try { const response = await fetch(`${process.env.NEXT_API_URL}/api/auth/verify_session`, { method: 'GET', headers: { 'Content-Type': 'application/json', 'Cookie': `session_cookie=${sessionCookie?.value}` }, credentials: 'include', }); const result = await response.json(); if (!response.ok || 'error' in result) { const response = NextResponse.next(); response.headers.set('x-session-state', 'expired'); return response; } let redirectUrl = '/'; [redirect logic...] return NextResponse.redirect(new URL(redirectUrl, request.url)); } catch (error) { console.log('--[middleware] - ERROR FETCHING VERIFY SESSION:', error); } } return NextResponse.next(); } // Routes Middleware should not run on export const config = { matcher: ['/((?!api|_next/static|_next/image|.*\\.png$).*)'], }
Pteromalid waspOP
from the logs it's correctly passing the session cookie to the flask backend, it correctly verifies the session in the flask backend, when it returns the error i still can not access /auth it just redirects me back to / or /test or wherever. what do i need to do to fix this...