tRPC mit React Query und Authentifizierung integrieren
Konfigurieren Sie die React-Query-Integration von tRPC, fügen Sie Authentifizierungs-Header hinzu und behandeln Sie geschützte Prozeduren.
tRPC mit React Query und Authentifizierung integrieren ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.
tRPC-Kontext: Daten pro Anfrage
Der tRPC-Kontext ist ein Objekt, das von der Funktion createTRPCContext für jede Anfrage neu erstellt wird. Es kann den Datenbank-Client, die authentifizierte Session, die Anfrage-Header oder beliebige andere anfragespezifische Daten enthalten, die Ihre Procedures benötigen.
Die Kontexterstellung erfolgt vor jeder Procedure und ist daher der richtige Ort für die Authentifizierung und die Einrichtung der Datenbankverbindung.
Session mit NextAuth zum Kontext hinzufügen
Rufen Sie in createTRPCContext getServerSession(authOptions) aus next-auth/next auf. Hängen Sie das Ergebnis an das Kontextobjekt an: return { session: await getServerSession(authOptions), db }. Alle Procedures haben nun Zugriff auf ctx.session.
Wenn session den Wert null hat, ist die Benutzerin oder der Benutzer nicht authentifiziert. Procedures können dies prüfen, um abhängig davon Daten zurückzugeben oder einen Fehler auszulösen.
Eine geschützte Procedure erstellen
Definieren Sie eine Middleware, die ctx.session prüft: const isAuthenticated = t.middleware(({ ctx, next }) => { if (!ctx.session) throw new TRPCError({ code: 'UNAUTHORIZED' }); return next({ ctx: { session: ctx.session } }); }).
Der Aufruf next() übergibt den eingeengten Kontext (mit einer nicht-null-Session) an nachfolgende Middlewares und den Procedure-Handler.
Definition von protectedProcedure
Verknüpfen Sie die Middleware mit publicProcedure: const protectedProcedure = publicProcedure.use(isAuthenticated). Jede mit protectedProcedure.query() oder protectedProcedure.mutation() definierte Funktion verfügt nun automatisch über eine nicht-null-Session in ctx.
TypeScript erkennt, dass ctx.session innerhalb geschützter Procedures nicht null ist, weil die Middleware vor dem Erreichen des Handlers einen Fehler ausgelöst hätte.
protectedProcedure verwenden
Ersetzen Sie publicProcedure bei Endpunkten, die eine Authentifizierung erfordern, durch protectedProcedure: protectedProcedure.query(({ ctx }) => getProfileFor(ctx.session.user.id)). TypeScript weiß hier, dass ctx.session nicht null ist. Daher kann sicher auf ctx.session.user.id zugegriffen werden, ohne eine Nullprüfung.
Nicht authentifizierte Anfragen erhalten automatisch eine 401-UNAUTHORIZED-Antwort, bevor der Handler ausgeführt wird.
Auth-Header vom Client senden
Übergeben Sie eine headers-Funktion an httpBatchLink: links: [httpBatchLink({ url: '/api/trpc', headers: async () => { const token = await getToken(); return { Authorization: 'Bearer ' + token }; } })]. Die Funktion wird vor jedem Batch von Anfragen ausgeführt.
Dies wird verwendet, wenn Sie tRPC über einen React-Native-Client oder einen anderen Nicht-Next.js-Client authentifizieren, der seine Authentifizierungstokens selbst verwaltet.
Serverseitiges Rendern mit createServerSideHelpers
Für SSR im Pages Router von Next.js erstellen Sie einen serverseitigen Helper: createServerSideHelpers({ router: appRouter, ctx: await createContext({ req, res }) }). Verwenden Sie helpers.post.getAll.prefetch() in getServerSideProps.
Dehydrieren Sie den vorab geladenen Zustand mit dehydrate(queryClient) und übergeben Sie ihn als Props. Auf dem Client hydratisiert der QueryClient aus diesem Zustand, sodass der erneute Abruf beim ersten Laden entfällt.
tRPC-Query-Cache für SSR hydratisieren
Umgeben Sie _app.tsx Ihrer Next.js-Anwendung mit Hydrate aus @tanstack/react-query. Übergeben Sie pageProps.trpcState an die state-Prop. Dadurch wird der vorab geladene Query-Cache auf dem Client aus dem serialisierten Serverzustand wiederhergestellt.
Mit dieser Einrichtung sehen Benutzerinnen und Benutzer sofort vollständig geladene Seiten, ohne beim ersten Navigieren clientseitige Ladeindikatoren zu sehen.
TRPCError-Codes
Werfen Sie TRPCError mit passenden HTTP-semantischen Codes: UNAUTHORIZED (401), FORBIDDEN (403), NOT_FOUND (404), BAD_REQUEST (400), INTERNAL_SERVER_ERROR (500). Der tRPC-Client ordnet diese passenden Fehlerzuständen im Hook-Ergebnis zu.
Das Feld message kann für die Benutzeroberfläche bestimmte Details enthalten. Vermeiden Sie es jedoch, in Produktionsfehlermeldungen vertrauliche Serverinformationen preiszugeben.
tRPC mit React Native
tRPC funktioniert mit React-Native-Clients unter Verwendung desselben AppRouter-Typs. Ersetzen Sie httpBatchLink durch einen httpLink (RN fetch funktioniert genauso) und konfigurieren Sie die Authentifizierungs-Header. Der @trpc/react-query-Adapter funktioniert genauso wie bei der Webanwendung.
Das bedeutet, dass ein Monorepo einen tRPC-Router zwischen einer Next.js-Webanwendung und einer Expo-React-Native-Anwendung gemeinsam nutzen kann – mit vollständiger Typsicherheit auf beiden Seiten.
Rollenbasierte Autorisierung
Erweitern Sie das Middleware-Muster für die rollenbasierte Zugriffssteuerung: Prüfen Sie ctx.session.user.role und werfen Sie TRPCError({ code: 'FORBIDDEN' }), wenn die Rolle nicht ausreicht. Erstellen Sie adminProcedure = publicProcedure.use(isAdmin) für ausschließlich Administrationszwecken vorbehaltene Endpunkte.
Kombinieren Sie mehrere Middlewares für komplexe Autorisierungsregeln: publicProcedure.use(isAuthenticated).use(hasFeatureFlag('beta')).query(...).
Geschützte Procedure in tRPC
Wie wird in tRPC eine geschützte Procedure erstellt, um die Authentifizierung zu erzwingen?
Zusammenfassung der Lektion
Der tRPC-Kontext wird pro Anfrage erstellt und enthält die Session, den Datenbank-Client sowie weitere anfragespezifische Daten. Geschützte Procedures werden erstellt, indem mit .use() eine Middleware zur Sitzungsprüfung an publicProcedure angehängt wird. Das serverseitige Rendering verwendet createServerSideHelpers zum Vorabladen und Hydrate zum Wiederherstellen des Caches auf dem Client.
Auth-Header für Nicht-Next.js-Clients werden über die headers-Option von httpBatchLink übergeben.
Häufig gestellte Fragen
Ist die Lektion „tRPC mit React Query und Authentifizierung integrieren“ kostenlos?
Ja — der vollständige Text von „tRPC mit React Query und Authentifizierung integrieren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „tRPC mit React Query und Authentifizierung integrieren“?
Konfigurieren Sie die React-Query-Integration von tRPC, fügen Sie Authentifizierungs-Header hinzu und behandeln Sie geschützte Prozeduren. Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um React Academy zu starten?
Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „tRPC mit React Query und Authentifizierung integrieren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?
Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Welches Problem tRPC löst
- tRPC mit React und Next.js einrichten
- Queries, Mutationen und Subscriptions
- tRPC mit React Query und Authentifizierung integrieren