.ts
TypeScript
(application/typescript)
import type { preHandlerHookHandler } from "fastify";
// app
import { AppRoute } from "../../routes.defs";

export const authenticatedOrLogin =
  (): preHandlerHookHandler => async (request, reply) => {
    if (request.session.data.authenticated === false) {
      const parts = request.routerPath.split("/");
      const params = request.params as Record<string, unknown>;
      const redirectGotoUri = parts.map((part) => {
        if (part.trim() === "") return part;
        if (part.startsWith(":")) {
          const paramKey = part.substring(1);
          const param = params[paramKey];
          if (param != null) return param;
          return part;
        }
        return part;
      });

      const redirectAuthUri = [
        request.namedViewsPathMap[AppRoute.AUTH_LOGIN],
        `?after_login_goto=${redirectGotoUri.join("/")}`,
      ].join("");

      console.log("redirectTo:", redirectAuthUri);

      // reply.redirect(302, request.namedViewsPathMap[AppRoute.AUTH_LOGIN]);
      reply.redirect(302, redirectAuthUri);
    }
  };