React Academy · Oppitunti

tRPC:n integrointi React Queryn ja Authin kanssa

Määrittäkää tRPC:n React Query -integraatio, lisätkää todennusotsakkeet ja käsitelkää suojattuja proseduu­reja.

Oppitunti 4/413 vaihetta

tRPC:n integrointi React Queryn ja Authin kanssa on ilmainen React Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu React Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. React Academy-kurssilla on yhteensä 4 oppituntia.

tRPC-konteksti: pyyntökohtaiset tiedot

tRPC-konteksti on olio, jonka createTRPCContext-funktio luo erikseen jokaista pyyntöä varten. Se voi sisältää tietokanta-asiakkaan, todennetun istunnon, pyynnön otsakkeet tai muita pyyntökohtaisia tietoja, joita proseduurit tarvitsevat.

Konteksti luodaan ennen minkään proseduurin suorittamista, joten se on oikea paikka todennuksen ja tietokantayhteyden valmisteluun.

Istunnon lisääminen kontekstiin NextAuthilla

Kutsukaa createTRPCContextissa next-auth/next-kirjaston getServerSession(authOptions)-funktiota. Liittäkää tulos kontekstiobjektiin: return { session: await getServerSession(authOptions), db }. Nyt kaikilla proseduu­reilla on käytettävissään ctx.session.

Jos session on null, käyttäjää ei ole todennettu. Proseduurit voivat tarkistaa tämän ja palauttaa tietoja ehdollisesti tai heittää virheen.

Suojatun proseduurin luominen

Määritelkää middleware, joka tarkistaa ctx.session-arvon: const isAuthenticated = t.middleware(({ ctx, next }) => { if (!ctx.session) throw new TRPCError({ code: 'UNAUTHORIZED' }); return next({ ctx: { session: ctx.session } }); }).

next()-kutsu välittää rajatun kontekstin (jonka session ei ole null) seuraaville middlewareille ja proseduurikäsittelijälle.

protectedProcedure-määrittely

Yhdistäkää middleware publicProcedureen: const protectedProcedure = publicProcedure.use(isAuthenticated). Nyt jokaisella protectedProcedure.query()- tai protectedProcedure.mutation()-kutsulla määritellyllä käsittelijällä on automaattisesti ei-null-arvoinen session ctx-objektissa.

TypeScript päättelee, että ctx.session ei ole null suojatuissa proseduu­reissa, koska middleware olisi heittänyt virheen ennen käsittelijän saavuttamista.

protectedProceduren käyttäminen

Korvatkaa publicProcedure protectedProcedurella todennusta vaativissa päätepisteissä: protectedProcedure.query(({ ctx }) => getProfileFor(ctx.session.user.id)). TypeScript tietää tässä, että ctx.session ei ole null, joten ctx.session.user.id:n käyttäminen on turvallista ilman null-tarkistusta.

Todentamattomat pyynnöt saavat automaattisesti 401 UNAUTHORIZED -vastauksen ennen käsittelijän suorittamista.

Todennusotsakkeiden lähettäminen asiakkaalta

Välittäkää headers-funktio httpBatchLinkille: links: [httpBatchLink({ url: '/api/trpc', headers: async () => { const token = await getToken(); return { Authorization: 'Bearer ' + token }; } })]. Funktio suoritetaan ennen jokaista pyyntöerää.

Tätä käytetään, kun tRPC todennetaan React Native -asiakasohjelmasta tai muusta kuin Next.js-asiakasohjelmasta, joka hallinnoi todennustunnisteitaan itse.

Palvelinpuolen renderöinti createServerSideHelpersilla

Next.js:n Pages Routerin palvelinpuolen renderöintiä varten luokaa palvelinpuolen apufunktio: createServerSideHelpers({ router: appRouter, ctx: await createContext({ req, res }) }). Käyttäkää getServerSideProps-funktiossa helpers.post.getAll.prefetch()-kutsua.

Muuntaa esiladattu tila muotoon dehydrate(queryClient) ja välittäkää se propseina. Asiakaspuolen QueryClient hydratoituu tästä tilasta, joten ensimmäistä latauksen aikaista hakua ei tarvitse tehdä uudelleen.

tRPC-kyselyvälimuistin hydratointi SSR:ää varten

Käärikää Next.js:n _app.tsx @tanstack/react-query-kirjaston Hydrate-komponenttiin. Välittäkää pageProps.trpcState state-propille. Tämä palauttaa esiladatun kyselyvälimuistin asiakasohjelmassa sarjallistetusta palvelintilasta.

Tällä asetuksella käyttäjät näkevät sivut heti täysin täytettyinä ilman asiakaspuolen latausilmaisimia ensimmäisen navigoinnin aikana.

TRPCError-koodit

Heittäkää TRPCError-virhe sopivalla HTTP-semantiikkaa vastaavalla koodilla: UNAUTHORIZED (401), FORBIDDEN (403), NOT_FOUND (404), BAD_REQUEST (400), INTERNAL_SERVER_ERROR (500). tRPC-asiakasohjelma muuntaa nämä hookin tuloksen asianmukaisiksi virhetiloiksi.

message-kenttä voi sisältää käyttäjälle näytettäviä tietoja, mutta tuotannossa kannattaa välttää arkaluonteisten palvelintietojen paljastamista virheviesteissä.

tRPC ja React Native

tRPC toimii React Native -asiakasohjelmien kanssa käyttäen samaa AppRouter-tyyppiä. Korvatkaa httpBatchLink httpLinkillä (RN:n fetch toimii samalla tavalla) ja määrittäkää todennusotsakkeet. @trpc/react-query-sovitin toimii samalla tavalla kuin verkkosovelluksen asetuksissa.

Tämä tarkoittaa, että monorepo voi jakaa yhden tRPC-reitittimen Next.js-verkkosovelluksen ja Expo React Native -sovelluksen välillä siten, että molemmissa on täysi tyyppiturvallisuus.

Roolipohjainen valtuutus

Laajentakaa middleware-mallia roolipohjaista käyttöoikeuksien hallintaa varten: tarkistakaa ctx.session.user.role ja heittäkää TRPCError({ code: 'FORBIDDEN' }), jos rooli ei riitä. Luokaa adminProcedure = publicProcedure.use(isAdmin) vain ylläpitäjille tarkoitetuille päätepisteille.

Yhdistäkää useita middlewareja monimutkaista valtuutusta varten: publicProcedure.use(isAuthenticated).use(hasFeatureFlag('beta')).query(...).

tRPC:n suojattu proseduur

Miten tRPC:ssä luodaan suojattu proseduur, joka pakottaa käyttäjän todentamisen?

Oppitunnin kertaus

tRPC-konteksti luodaan jokaista pyyntöä varten, ja se sisältää istunnon, tietokanta-asiakkaan sekä muut pyynnön laajuuteen sidotut tiedot. Suojatut proseduurit luodaan liittämällä istunnon tarkistava middleware publicProcedureen .use()-kutsulla. Palvelinpuolen renderöinnissä käytetään createServerSideHelpers-apufunktiota esilataukseen ja Hydratea välimuistin palauttamiseen asiakasohjelmassa.

Muiden kuin Next.js-asiakasohjelmien todennusotsakkeet välitetään httpBatchLinkin headers-asetuksella.

Aloita maksutta

Opi React tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
88
Oppitunnit
324

Usein kysytyt kysymykset

Onko oppitunti ”tRPC:n integrointi React Queryn ja Authin kanssa” ilmainen?

Kyllä – oppitunnin ”tRPC:n integrointi React Queryn ja Authin kanssa” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko React Academy-kurssin, päivitä CoddyKit PROhon. React Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”tRPC:n integrointi React Queryn ja Authin kanssa”?

Määrittäkää tRPC:n React Query -integraatio, lisätkää todennusotsakkeet ja käsitelkää suojattuja proseduu­reja. Harjoittelet React Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni React Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin React Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”tRPC:n integrointi React Queryn ja Authin kanssa”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä React Academy-oppitunnilla?

Kyllä. Jokainen React Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. tRPC:n ratkaisema ongelma
  2. tRPC:n käyttöönotto Reactin ja Next.js:n kanssa
  3. Kyselyt, mutaatiot ja tilaukset
  4. tRPC:n integrointi React Queryn ja Authin kanssa
← Takaisin: React Academy