typescript - Få inte cookies i trpc-kontext
Så jag har trpc uppsatt med next.js och jag försöker göra ssr där jag hämtar användaren innan sidladdning med trpc.useQuery-hooken, men jag får inte kakan med JWT-token i trpc-kontexten
jag har den här koden på sidan [username].tsx:
const UserPage: NextPage = () => {
const router = useRouter();
const username = router.query.username as string;
const user = trpc.useQuery([
"user.by-username",
{
username,
},
]);
return <Text>{user?.data?.id}</Text>;
};
export default UserPage;
och den här koden i trpc-kontexten, där jag inte kan console.loga kakorna:
export const createContext = (opts?: trpcNext.CreateNextContextOptions) => {
const req = opts?.req;
const res = opts?.res;
console.log(req?.cookies) // i don't get cookies here
const user = jwt.verify(req?.cookies.token as string, process.env.JWT_SECRET as string) as User
return {
req,
res,
prisma,
user
};
};
type Context = trpc.inferAsyncReturnType<typeof createContext>;
export const createRouter = () => trpc.router<Context>();
Svar #1
Låt mig kopiera över svaret från GitHub för progeny.
Det är en SSR-grej. Headers kopieras inte över som standard, så du måste inkludera följande kodsnutt:
export default withTRPC<AppRouter>({
// @typescript-eslint/no-unused-vars
config({ ctx }) {
/**
* If you want to use SSR, you need to
* use the server's full URL
* @link https://trpc.io/docs/ssr
*/
return {
headers() {
return {
cookie: ctx?.req?.headers.cookie,
};
},
}
}
})
Det finns en PR öppen för att förbättra dokumentationen om detta.
Svar #2
Jag tror att det du saknar är att vidarebefordra rubrikerna från webbläsaren.
Detta är magin du letar efter: https://github.com/trpc/examples-next-prisma-starter-websockets/blob/daf54ca6576f3e290aa4f36dc7d0ff1eb718b716/src/pages/_app.tsx#L79
Vi har ett öppet ärende för att förbättra detta :) https://github.com/trpc/trpc/issues/1811
