mirror of
https://github.com/shadcn-ui/taxonomy
synced 2026-05-23 09:18:30 +00:00
46 lines
1.1 KiB
TypeScript
46 lines
1.1 KiB
TypeScript
import { getToken } from "next-auth/jwt"
|
|
import { withAuth } from "next-auth/middleware"
|
|
import { NextResponse } from "next/server"
|
|
|
|
export default withAuth(
|
|
async function middleware(req) {
|
|
const token = await getToken({ req })
|
|
const isAuth = !!token
|
|
const isAuthPage =
|
|
req.nextUrl.pathname.startsWith("/login") ||
|
|
req.nextUrl.pathname.startsWith("/register")
|
|
|
|
if (isAuthPage) {
|
|
if (isAuth) {
|
|
return NextResponse.redirect(new URL("/dashboard", req.url))
|
|
}
|
|
|
|
return null
|
|
}
|
|
|
|
if (!isAuth) {
|
|
let from = req.nextUrl.pathname;
|
|
if (req.nextUrl.search) {
|
|
from += req.nextUrl.search;
|
|
}
|
|
|
|
return NextResponse.redirect(
|
|
new URL(`/login?from=${encodeURIComponent(from)}`, req.url)
|
|
);
|
|
}
|
|
},
|
|
{
|
|
callbacks: {
|
|
async authorized() {
|
|
// This is a work-around for handling redirect on auth pages.
|
|
// We return true here so that the middleware function above
|
|
// is always called.
|
|
return true
|
|
},
|
|
},
|
|
}
|
|
)
|
|
|
|
export const config = {
|
|
matcher: ["/dashboard/:path*", "/editor/:path*", "/login", "/register"],
|
|
}
|