0

我正在使用 Next.js 和 Supabase 作为 BaaS 制作 Trello 克隆。

在我的 Supbase 表中,我有以下策略:

在此处输入图像描述

策略在客户端使用以下代码运行:

const { data } = await supabase
    .from<BoardType>('board')
    .select('*')
    .eq('id', board.id)
    .single();

但是当我尝试获取有关它的板信息时,getServerSideProps它不起作用,它总是返回 null 。我知道,例如,如果你想在服务器端获取经过身份验证的用户,你必须使用supabase.auth.api.getUserByCookie(context.req)所以我不知道我是否缺少某些东西,但我找不到与此相关的任何东西。

有谁知道如何处理?

[已编辑]

这是getServerSideProps代码:

export const getServerSideProps: GetServerSideProps<BoardSlugProps> = async ({
  query,
}) => {
  const { data } = await supabase
    .from<BoardType>('board')
    .select('*')
    .eq('id', query.slug as string)
    .single();
  console.log(data);
  return {
    props: {
      board: data,
    },
  };
};
4

2 回答 2

0

可能不是最好的方法,但这就是我通过这个 Github 讨论的一些提示解决它的方法https://github.com/supabase/supabase/discussions/1094#discussioncomment-714633

据我了解,与浏览器(无会话)相比,服务器上的 Supabase 客户端略有不同。从 cookie 中提取令牌并将其添加到客户端可以使对 supabase 的请求来自经过身份验证的用户。

export const getServerSideProps: GetServerSideProps = ({ req }) => {
  const { user, token } = await supabase.auth.api.getUserByCookie(req);
  supabase.auth.setAuth(token);

  const { data, error } = await supabase.from(...
于 2022-01-30T06:22:01.687 回答
0

我发现它使用匿名密钥而不是 getSSProps 中经过身份验证的 jwt 在数据库上发送请求。不知道为什么或是否是故意的。如果您添加 role() = 'anon' 规则,它会起作用,但我认为这不是您想要的。

于 2022-01-17T18:24:08.020 回答