🐛 Handle missing session in trpc api

If the user doesn’t have a session then we redirect to login screen from the server
This commit is contained in:
Luke Vella 2024-12-03 21:02:15 +00:00
parent 2b211217a1
commit d3c721a916
No known key found for this signature in database
GPG key ID: 469CAD687F0D784C
2 changed files with 13 additions and 14 deletions

View file

@ -4,7 +4,6 @@ import "../../style.css";
import { Toaster } from "@rallly/ui/toaster";
import type { Viewport } from "next";
import { Inter } from "next/font/google";
import { redirect } from "next/navigation";
import React from "react";
import { TimeZoneChangeDetector } from "@/app/[locale]/timezone-change-detector";
@ -33,10 +32,6 @@ export default async function Root({
}) {
const session = await getServerSession();
if (!session) {
redirect("/login");
}
return (
<html lang={locale} className={inter.className}>
<body>

View file

@ -1,5 +1,6 @@
import { createServerSideHelpers } from "@trpc/react-query/server";
import { TRPCError } from "@trpc/server";
import { redirect } from "next/navigation";
import superjson from "superjson";
import { getServerSession } from "@/auth";
@ -18,7 +19,7 @@ async function createContext(): Promise<TRPCContext> {
});
}
const res = {
return {
user: {
id: session.user.id,
isGuest: session.user.email === null,
@ -27,8 +28,6 @@ async function createContext(): Promise<TRPCContext> {
getEmailClient: () => getEmailClient(session.user.locale ?? undefined),
},
};
return res;
}
/**
@ -36,9 +35,14 @@ async function createContext(): Promise<TRPCContext> {
* @description use this function to call tRPC procedures server-side and hydrate `react-query`'s cache
* @see https://trpc.io/docs/client/nextjs/server-side-helpers#1-internal-router
*/
export const createSSRHelper = async () =>
createServerSideHelpers({
router: appRouter,
ctx: await createContext(),
transformer: superjson,
});
export const createSSRHelper = async () => {
try {
return createServerSideHelpers({
router: appRouter,
ctx: await createContext(),
transformer: superjson,
});
} catch (error) {
return redirect("/login");
}
};