tRPC:n integrointi React Queryn ja Authin kanssa
Määrittäkää tRPC:n React Query -integraatio, lisätkää todennusotsakkeet ja käsitelkää suojattuja proseduureja.
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 proseduureilla 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 proseduureissa, 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.
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 proseduureja. 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
- tRPC:n ratkaisema ongelma
- tRPC:n käyttöönotto Reactin ja Next.js:n kanssa
- Kyselyt, mutaatiot ja tilaukset
- tRPC:n integrointi React Queryn ja Authin kanssa