对 getServerSideProps 的 Supabase 策略 - Next.js

Supabase policies on getServerSideProps - Next.js

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

在我的 Supabase table 我有这个政策:

政策在客户端有效,代码如下:

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

但是当我尝试在 getServerSideProps 上获取董事会信息时它不起作用,它一直 return 为空。我知道,例如,如果你想在服务器端获得经过身份验证的用户,你必须使用 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,
    },
  };
};

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

可能不是最好的方法,但这是我根据 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(...