AFE_exam

Q07 Next.js

Spørgsmål

  1. Giv en overordnet forklaring på, hvad Next.js er.
  2. Forklar de forskellige komponenttyper i Next.js, og hvordan man kan mixe dem.
  3. Forklar hvordan App Router bruges, og hvordan den er forskellig fra Pages Router.
  4. Forklar authentication og authorization i Next.js.

Kør projektet med:
npm run dev i fitness-next.


1. Hvad er Next.js?

Next.js er et avanceret React-framework designet til at bygge produktionsklare webapplikationer. Det tilbyder:


2. Komponenttyper i Next.js og mixing

Komponenttyper

  1. Page Components:
    • Definerer sider i applikationen.
    • Understøtter SSR og SSG via getServerSideProps og getStaticProps.
  2. React-komponenter:
    • Genanvendelige komponenter placeret i components mappen.
  3. Server Components:
    • Renderes på serveren.
    • Bruges til datastyring og optimering.
    • Kan ikke bruge hooks som useState.
  4. Client Components:
    • Renderes i browseren.
    • Bruges til dynamiske funktioner og brugerinteraktion.
    • Skal deklareres med use client.

Mixing af Server og Client Components

Eksempel på mixing:


3. App Router vs. Pages Router

Pages Router

App Router

Eksempel på App Router:

// filepath: /src/app/layout.tsx
export default function Layout({ children }) {
  return (
    <div>
      <header>
        <h1>My Fitness App</h1>
      </header>
      <main>{children}</main>
    </div>
  );
}

Forskelle mellem App Router og Pages Router:

Feature App Router Pages Router
Routing Dynamisk routing med mapper Filbaseret routing
Datahentning React Server Components getServerSideProps, getStaticProps
Layout-deling Indbygget med layout.tsx Manuel opsætning
Performance Bedre via streaming og Suspense Traditionel server-rendering

4. Authentication og Authorization i Next.js

Authentication

Eksempel på login med JWT:

const login = (jwt: string) => {
  const decodedToken = decodeJWT(jwt);
  localStorage.setItem('jwt', jwt);
  setUser({ jwt, role: decodedToken.role });
};

Authorization/adgangskontrol

Eksempel: Beskyttelse af sider:

if (user.role !== 'admin') {
  return <p>Access Denied</p>;
}

Middleware til adgangskontrol:

export function middleware(req) {
  const token = req.cookies.get('jwt');
  if (!token) return NextResponse.redirect('/login');
  return NextResponse.next();
}

Hvorfor dette setup er effektivt?


Denne struktur gør det lettere at forstå og besvare de spørgsmål, der er stillet.

4. Authentication og Authorization i Next.js

Authentication og authorization er kernefunktioner i Next.js, der sikrer, at brugere kan identificeres og gives de korrekte adgangsrettigheder.

Authentication

Eksempel på JWT-implementering i login:

const login = (jwt: string) => {
  const decodedToken = decodeJWT(jwt);
  localStorage.setItem('jwt', jwt);
  setUser({ jwt, role: decodedToken.role });
};

Authorization

Eksempel på rollebaseret adgangskontrol:

if (user.role !== 'admin') {
  return <p>Access Denied</p>;
}

Middleware til adgangskontrol:

export function middleware(req) {
  const token = req.cookies.get('jwt');
  if (!token) return NextResponse.redirect('/login');
  return NextResponse.next();
}

Generel implementering i Next.js

  1. Authentication:
    • Brug JWT til at gemme brugeroplysninger og validere sessioner.
    • Alternativt kan tredjeparts tjenester som Firebase bruges.
  2. Authorization:
    • Middleware bruges til at beskytte ruter.
    • Server-side kontrol sikrer, at kun autoriserede brugere kan tilgå specifikke sider.

Hvor det bruges i projektet:
I fitness-next er authentication og authorization implementeret med JWT. Brugerens token gemmes i localStorage, og rollen (accountType) bruges til at beskytte sider. For mere detaljer, se auth-context.tsx.