首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不要在trpc上下文中获得cookie

不要在trpc上下文中获得cookie
EN

Stack Overflow用户
提问于 2022-07-09 20:07:05
回答 2查看 1.2K关注 0票数 5

因此,我使用next.js和im设置trpc,在使用trpc.useQuery钩子加载页面之前获取用户,但在trpc上下文中没有使用JWT获取cookie。

我在username.tsx页面中有以下代码:

代码语言:javascript
复制
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;

这是trpc上下文中的代码,在这里我不能console.log cookie:

代码语言:javascript
复制
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>();
EN

回答 2

Stack Overflow用户

发布于 2022-07-12 06:10:54

让我复制来自github的答案的后代。

这是SSR的事。默认情况下,头文件不会被复制,因此您必须包含以下代码段:

代码语言:javascript
复制
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,
        };
      },
    }
  }
})

有一个PR开来改进这方面的文档。

票数 2
EN

Stack Overflow用户

发布于 2022-07-13 22:34:31

我认为您缺少的是从浏览器中转发标头。

这就是你要寻找的魔法:app.tsx#L79

我们有一个有待改进的问题:) https://github.com/trpc/trpc/issues/1811

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72924281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档