You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Supabase V2中如何用withPageAuth实现redux-next-wrapper原SSR功能?

问题描述

在Supabase V2版本之前,我通过以下代码借助redux-next-wrapper获取数据并存入Redux:

export const getServerSideProps = wrapper.getServerSideProps(
  (store) => async ({ req }) => {
    const { user } = await supabase.auth.api.getUserByCookie(req);
    if (user === null) {
      return {
        redirect: {
          permanent: false,
          destination: "/auth",
        },
        props: {},
      };
    }
    if (user) {
      async function getData() {
        let { data, error, status } = await supabase
          .from("table")
          .select(`id`)
          .eq("id", user.id);
        store.dispatch(writeUserData(data));
        return data;
      }

      return {
        props: {
          data: await getData(),
        },
      };
    }
  }
);

但Supabase V2破坏了redux-next-wrapper的部分功能,请问如何使用withPageAuth实现上述相同功能?以下是withPageAuth的基础示例:

export const getServerSideProps = withPageAuth({
  redirectTo: '/foo',
  async getServerSideProps (ctx, supabase) {
    // Access the user object
    const {
      data: { user }
    } = await supabase.auth.getUser()

    return { props: { id: user?.id } }
  }
})
解决方案

要在Supabase V2中用withPageAuth实现原逻辑,需将redux-next-wrapper的wrapper与withPageAuth结合,在认证回调内完成数据查询和Redux存储,具体代码如下:

export const getServerSideProps = wrapper.getServerSideProps(
  (store) => async (ctx) => {
    // 用withPageAuth处理认证跳转,内部执行原有业务逻辑
    const authResult = await withPageAuth({
      redirectTo: "/auth",
      async getServerSideProps(_, supabase) {
        // 获取当前认证用户
        const { data: { user } } = await supabase.auth.getUser();
        
        if (!user) {
          return { props: {} };
        }

        // 查询用户对应数据
        const { data, error, status } = await supabase
          .from("table")
          .select(`id`)
          .eq("id", user.id);

        // 将数据存入Redux
        store.dispatch(writeUserData(data));

        return { props: { data } };
      }
    })(ctx);

    return authResult;
  }
);

关键说明:

  • 保留redux-next-wrapper的外层wrapper.getServerSideProps结构,内部嵌套withPageAuth处理认证逻辑
  • 通过withPageAuth回调传入的supabase实例获取用户,替代V1版本的getUserByCookie方法
  • 数据查询和Redux dispatch逻辑与原代码一致,直接放在withPageAuth的回调内
  • redirectTo参数指定未认证用户的跳转目标,withPageAuth会自动处理未认证场景的跳转,无需手动判断用户是否为空

内容的提问来源于stack exchange,提问作者Brydawg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 22:10:25