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

Next14中Supabase Google OAuth登录后自定义redirectUrl重定向问题

解决Next.js + Supabase OAuth登录后按redirectUrl参数跳转的问题

问题分析

邮箱登录能正常通过redirectUrl参数跳转,是因为登录流程完全在客户端完成,可直接读取参数并跳转;而Google OAuth登录需要经过第三方授权流程,必须将redirectUrl传递到Supabase的回调地址,再在回调页面完成最终跳转,之前的配置缺少了获取请求中的redirectUrl参数和回调页处理跳转这两个关键步骤。

解决方案步骤

1. 修改Google登录的Server Action,获取并传递redirectUrl

在Server Action中,先从请求URL里提取redirectUrl参数,再配置到redirectTo中:

export async function signInWithGoogle() {
  // 从当前请求中获取redirectUrl参数
  const request = await fetchRequest();
  const searchParams = new URL(request.url).searchParams;
  const redirectUrl = searchParams.get("redirectUrl") || "/";

  const supabase = createClient();
  const { data, error } = await supabase.auth.signInWithOAuth({
    provider: 'google',
    options: {
      // 指向回调页并携带redirectUrl参数
      redirectTo: `${getURL()}auth/callback?redirectUrl=${encodeURIComponent(redirectUrl)}`,
    },
  });
  if (error) {
    console.error(error);
    return;
  }
  if (data?.url) {
    return redirect(data.url);
  }
}

2. 创建认证回调页面,处理最终跳转

新建app/auth/callback/page.js(或.tsx),在该页面完成OAuth登录后的状态校验与跳转:

"use client";

import { useEffect } from "react";
import { useRouter, useSearchParams } from "next/navigation";
import { createClient } from "@/utils/supabase/client";

export default function AuthCallback() {
  const router = useRouter();
  const searchParams = useSearchParams();
  const redirectUrl = searchParams.get("redirectUrl") || "/";

  useEffect(() => {
    const supabase = createClient();

    const checkAuth = async () => {
      // 确认OAuth流程完成,获取会话信息
      const { data: { session } } = await supabase.auth.getSession();
      if (session) {
        // 登录成功,跳转到指定地址
        router.push(redirectUrl);
      }
    };

    checkAuth();
  }, [router, redirectUrl]);

  return <div>登录验证中...</div>;
}

3. 配置Supabase控制台的认证地址

进入Supabase控制台 → 项目设置 → 认证:

  • Site URL:设置为你的站点根地址(本地http://localhost:3000,生产环境填你的域名)
  • Redirect URLs:添加回调地址,比如http://localhost:3000/auth/callback和生产环境的对应地址,确保与redirectTo中的地址完全一致。

关键注意事项

  • 必须对redirectUrl做encodeURIComponent编码,避免特殊字符导致参数传递失败
  • 回调页面必须是客户端组件(加"use client"指令),因为需要使用useRouter和useSearchParams
  • 确保Supabase控制台的Redirect URLs包含你的回调地址,否则会出现授权错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 11:37:19