KO
베타 번역

@yohangel / auth-next

1.0.0 ▾
MIT
GitHub

Next.js App Router용 Better Auth: 라우트 핸들러, proxy 리디렉션, 서버 세션

코드파일 5개컨텍스트약 545토큰검사 통과

.genpmignore 적용 후 주입될 정확한 트리입니다. 고정 대상:

src/lib/auth-next/proxy.ts읽기 전용 · 7145b9d
// Protección optimista en el borde (Next 16 `proxy.ts`, o `middleware.ts` en Next 15): solo mira si existe la
// cookie de sesión, sin tocar la BD. NO es una comprobación de seguridad: valida siempre con `requireSession()` en
// la página o acción. Sirve para redirigir rápido a quien claramente no ha iniciado sesión.
import { getSessionCookie } from 'better-auth/cookies';
import { type NextRequest, NextResponse } from 'next/server.js';

export type AuthProxyOptions = {
  /** Prefijos de ruta privados, p. ej. ['/dashboard', '/settings']. */
  protect: string[];
  /** Página de inicio de sesión. */
  signInPath?: string;
};

export function authProxy({ protect, signInPath = '/sign-in' }: AuthProxyOptions) {
  return (request: NextRequest) => {
    const { pathname, search } = request.nextUrl;
    const isPrivate = protect.some((p) => pathname === p || pathname.startsWith(`${p}/`));
    if (!isPrivate || getSessionCookie(request)) return NextResponse.next();
    const url = new URL(signInPath, request.url);
    url.searchParams.set('next', `${pathname}${search}`);
    return NextResponse.redirect(url);
  };
}

/** Solo rutas internas: evita redirecciones abiertas con `?next=https://evil.example`. */
export function safeNext(next: string | null | undefined, fallback = '/'): string {
  return next?.startsWith('/') && !next.startsWith('//') && !next.startsWith('/\\') ? next : fallback;
}

@yohangel/auth-next 신고

패키지를 신고하려면 GitHub로 로그인하세요.