React Academy · leksjon

Integrere tRPC med React Query og autentisering

Konfigurer tRPCs React Query-integrasjon, legg til autentiseringsheadere og håndter beskyttede prosedyrer.

Leksjon 4 av 413 trinn

Integrere tRPC med React Query og autentisering er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.

tRPC-kontekst: Data per forespørsel

tRPC-konteksten er et objekt som opprettes på nytt for hver forespørsel av funksjonen createTRPCContext. Den kan inneholde databaseklienten, den autentiserte økten, forespørselshodene eller andre data per forespørsel som prosedyrene trenger.

Opprettingen av konteksten skjer før enhver prosedyre, noe som gjør dette til riktig sted for oppsett av autentisering og databaseforbindelse.

Legge økt til konteksten via NextAuth

I createTRPCContext kalles getServerSession(authOptions) fra next-auth/next. Legg resultatet til i kontekstobjektet: return { session: await getServerSession(authOptions), db }. Alle prosedyrer har nå tilgang til ctx.session.

Hvis session er null, er brukeren ikke autentisert. Prosedyrene kan kontrollere dette for å returnere data betinget eller kaste en feil.

Opprette en beskyttet prosedyre

Definer en mellomvare som kontrollerer ctx.session: const isAuthenticated = t.middleware(({ ctx, next }) => { if (!ctx.session) throw new TRPCError({ code: 'UNAUTHORIZED' }); return next({ ctx: { session: ctx.session } }); }).

next()-kallet sender den innsnevrede konteksten, med en session som ikke er null, videre til påfølgende mellomvarer og prosedyrebehandleren.

Definisjon av protectedProcedure

Kombiner mellomvaren med publicProcedure: const protectedProcedure = publicProcedure.use(isAuthenticated). Nå har enhver behandler som er definert med protectedProcedure.query() eller protectedProcedure.mutation() automatisk en session som ikke er null i ctx.

TypeScript utleder at ctx.session ikke er null i beskyttede prosedyrer fordi mellomvaren ville ha kastet en feil før behandleren ble nådd.

Bruke protectedProcedure

Bytt ut publicProcedure med protectedProcedure for endepunkter som krever autentisering: protectedProcedure.query(({ ctx }) => getProfileFor(ctx.session.user.id)). TypeScript vet at ctx.session ikke er null her, så det er trygt å få tilgang til ctx.session.user.id uten en null-sjekk.

Uautentiserte forespørsler får automatisk et 401 UNAUTHORIZED-svar før behandleren kjøres.

Sende autentiseringshoder fra klienten

Send en headers-funksjon til httpBatchLink: links: [httpBatchLink({ url: '/api/trpc', headers: async () => { const token = await getToken(); return { Authorization: 'Bearer ' + token }; } })]. Funksjonen kjøres før hver gruppe av forespørsler.

Dette brukes når tRPC autentiseres fra en React Native-klient eller en annen klient enn Next.js som håndterer sine egne autentiseringstokener.

Gjengivelse på serversiden med createServerSideHelpers

For SSR i Next.js Pages Router oppretter du en hjelper på serversiden: createServerSideHelpers({ router: appRouter, ctx: await createContext({ req, res }) }). Bruk helpers.post.getAll.prefetch() i getServerSideProps.

Serialiser den forhåndshentede tilstanden med dehydrate(queryClient) og send den som props. På klienten hydrerer QueryClient fra denne tilstanden, slik at den første hentingen på nytt unngås.

Hydrere tRPC-spørringsbufferet for SSR

Pakk inn Next.js _app.tsx med Hydrate fra @tanstack/react-query. Send pageProps.trpcState til state-prop-en. Dette gjenoppretter den forhåndshentede spørringsbufferet på klienten fra den serialiserte tilstanden fra serveren.

Med dette oppsettet ser brukerne fullstendig utfylte sider umiddelbart, uten lastespinnere på klienten ved første navigering.

TRPCError-koder

Kast TRPCError med passende HTTP-semantiske koder: UNAUTHORIZED (401), FORBIDDEN (403), NOT_FOUND (404), BAD_REQUEST (400), INTERNAL_SERVER_ERROR (500). tRPC-klienten mapper disse til passende feiltilstander i resultatet fra hooken.

message-feltet kan inneholde detaljer som vises til brukeren, men unngå å lekke sensitiv serverinformasjon i feilmeldinger i produksjon.

tRPC med React Native

tRPC fungerer med React Native-klienter ved hjelp av den samme AppRouter-typen. Bytt ut httpBatchLink med httpLink (RN fetch fungerer på samme måte) og konfigurer autentiseringshoder. @trpc/react-query-adapteren fungerer på samme måte som i nettoppsettet.

Dette betyr at et monorepo kan dele én tRPC-ruter mellom en Next.js-nettapp og en Expo React Native-app, med full typesikkerhet i begge.

Rollebasert autorisasjon

Utvid mellomvaremønsteret for rollebasert tilgang: kontroller ctx.session.user.role og kast TRPCError({ code: 'FORBIDDEN' }) hvis rollen ikke har tilstrekkelige rettigheter. Opprett adminProcedure = publicProcedure.use(isAdmin) for endepunkter som bare administratorer har tilgang til.

Kombiner flere mellomvarer for kompleks autorisasjon: publicProcedure.use(isAuthenticated).use(hasFeatureFlag('beta')).query(...).

Beskyttet tRPC-prosedyre

Hvordan opprettes en beskyttet prosedyre i tRPC for å håndheve autentisering?

Leksjonsoppsummering

tRPC-konteksten opprettes for hver forespørsel og inneholder økten, databaseklienten og andre data knyttet til forespørselen. Beskyttede prosedyrer opprettes ved å kombinere en mellomvare som kontrollerer økten med publicProcedure ved hjelp av .use(). Gjengivelse på serversiden bruker createServerSideHelpers til forhåndshenting og Hydrate til å gjenopprette hurtigbufferet på klienten.

Autentiseringshoder for klienter som ikke bruker Next.js, sendes via headers-alternativet i httpBatchLink.

Gratis å komme i gang

Lær deg React med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
88
Leksjoner
324

Ofte stilte spørsmål

Er leksjonen «Integrere tRPC med React Query og autentisering» gratis?

Ja – hele teksten i «Integrere tRPC med React Query og autentisering» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Integrere tRPC med React Query og autentisering»?

Konfigurer tRPCs React Query-integrasjon, legg til autentiseringsheadere og håndter beskyttede prosedyrer. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med React Academy?

Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Integrere tRPC med React Query og autentisering»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?

Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Problemet tRPC løser
  2. Konfigurere tRPC med React og Next.js
  3. Spørringer, mutasjoner og abonnementer
  4. Integrere tRPC med React Query og autentisering
← Tilbake til React Academy