【问题标题】:Supabase policies on getServerSideProps - Next.jsgetServerSideProps 上的 Supbase 策略 - Next.js
【发布时间】:2021-11-11 20:37:55
【问题描述】:

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

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

策略在客户端使用以下代码起作用:

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,
    },
  };
};

【问题讨论】:

  • query.slug 有预期值吗?
  • 它确实是@juliomalves。实际上,如果我禁用表策略,它会起作用

标签: typescript next.js supabase


【解决方案1】:

可能不是最好的方法,但这就是我通过这个 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(...

【讨论】:

  • 这对我也很有效!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2021-02-08
    • 2020-07-03
    • 2021-11-14
    • 2020-10-14
    • 2021-11-10
    • 2021-12-16
    • 2023-02-06
    • 2021-01-14
    相关资源
    最近更新 更多