NextJS промежуточное программное обеспечение не работаетJavascript

Форум по Javascript
Ответить
Anonymous
 NextJS промежуточное программное обеспечение не работает

Сообщение Anonymous »

Я строю приборную панель в NextJS, используя Supabase для пользователя Auth. Я пытаюсь защитить свой маршрут /приборной панели, если пользователь не вписан. У шаблона Supabase есть проверки, если пользователь не подписан, но я все еще могу получить доступ /панель инструментов, введя его в URL, даже если пользователь не Подписывается. В моем промежуточном программном обеспечении .TS и/UTILS/Supabase/middleware.ts я вхожу в систему, просто чтобы посмотреть, набит ли промежуточное программное обеспечение, но ничего не регистрируется. Ниже приведена моя структура проекта, mindleware.ts и my/utils/supabase/middleware.ts.
структура проекта

Код: Выделить всё

// src/app/utils/supabase/middleware.ts

import { createServerClient } from '@supabase/ssr'
import { NextResponse, type NextRequest } from 'next/server'
import { redirect } from 'next/navigation'

export async function updateSession(request: NextRequest) {
console.log("Middleware running for:", request.nextUrl.pathname);
let supabaseResponse = NextResponse.next({
request,
})

const supabase = createServerClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
cookies: {
getAll() {
return request.cookies.getAll()
},
setAll(cookiesToSet) {
cookiesToSet.forEach(({ name, value, options }) => request.cookies.set(name, value))
supabaseResponse = NextResponse.next({
request,
})
cookiesToSet.forEach(({ name, value, options }) =>
supabaseResponse.cookies.set(name, value, options)
)
},
},
}
)

// Do not run code between createServerClient and
// supabase.auth.getUser(). A simple mistake could make it very hard to debug
// issues with users being randomly logged out.

// IMPORTANT: DO NOT REMOVE auth.getUser()

const {
data: { user },
} = await supabase.auth.getUser()

**if (
!user &&
!request.nextUrl.pathname.startsWith('/login') &&
!request.nextUrl.pathname.startsWith('/dashboard')
) {
// no user, potentially respond by redirecting the user to the login page
const url = request.nextUrl.clone()
url.pathname = '/login'
return NextResponse.redirect(url)
}**

// IMPORTANT: You *must* return the supabaseResponse object as it is.
// If you're creating a new response object with NextResponse.next() make sure to:
// 1. Pass the request in it, like so:
//    const myNewResponse = NextResponse.next({ request })
// 2. Copy over the cookies, like so:
//    myNewResponse.cookies.setAll(supabaseResponse.cookies.getAll())
// 3. Change the myNewResponse object to fit your needs, but avoid changing
//    the cookies!
// 4. Finally:
//    return myNewResponse
// If this is not done, you may be causing the browser and server to go out
// of sync and terminate the user's session prematurely!

return supabaseResponse
}< /code>
< /div>
< /div>
< /p>


//src/app/middleware.ts

import { type NextRequest } from 'next/server'
import { updateSession } from "./utils/supabase/middleware";

export async function middleware(request: NextRequest) {
console.log("middleware is running")
return await updateSession(request)
}

export const config = {
matcher: [
/*
* Match all request paths except for the ones starting with:
* - _next/static (static files)
* - _next/image (image optimization files)
* - favicon.ico (favicon file)
* Feel free to modify this pattern to include more paths.
*/
'/((?!_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)',
],
}



Подробнее здесь: https://stackoverflow.com/questions/794 ... ot-running
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»