Files
drop/server/plugins/redirect.ts
2025-02-04 13:15:52 +11:00

26 lines
662 B
TypeScript

import { H3Error } from "h3";
import sessionHandler from "../internal/session";
export default defineNitroPlugin((nitro) => {
nitro.hooks.hook("error", async (error, { event }) => {
if (!event) return;
// Don't handle for API routes
if (event.path.startsWith("/api")) return;
// Make sure it's a web error
if (!(error instanceof H3Error)) return;
switch (error.statusCode) {
case 401:
case 403:
const userId = await sessionHandler.getUserId(event);
if (userId) break;
return sendRedirect(
event,
`/signin?redirect=${encodeURIComponent(event.path)}`
);
}
});
});