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

Auth.js/NextAuth 登录成功后无法自动跳转至指定页面

Auth.js/NextAuth 登录成功后无法自动跳转至指定页面

看起来你遇到的问题是NextAuth Google登录验证通过后,没有自动跳转到你指定的/dashboard/inventory,而是停留在首页。我帮你分析下代码里的问题和解决办法:

问题根源

你已经在SignInWithGoogle服务器动作中传递了callbackUrl: "/dashboard/inventory",也在signIn回调里验证邮箱存在后返回了true,但在NextAuth v5中,仅返回true可能不会自动使用你传入的callbackUrl,需要更明确地处理跳转逻辑。

解决办法

方案1:在signIn回调中返回传入的callbackUrl

修改app/auth.js中的signIn回调,接收callbackUrl参数并在验证通过后返回它:

import NextAuth from "next-auth"
import Google from "next-auth/providers/google"
import { supabase } from "@/lib/supabase"

export const { handlers, auth, signIn, signOut } = NextAuth({
    providers: [Google],
    callbacks: {
        // 新增callbackUrl参数到signIn回调
        async signIn({ user, callbackUrl }) {
            const { data, error } = await supabase
                .from('stores')
                .select()
                .eq('email', user.email)
                .single()

            if (error || !data) {
                return '/error'
            }

            // 验证通过后返回指定的callbackUrl,替代原来的true
            return callbackUrl
        },
    },
    pages: {
        error: '/error'
    }
})

这样NextAuth会明确跳转到你指定的回调地址,而不是默认首页。

方案2:添加redirect回调强制处理跳转

如果方案1不生效,可以在callbacks中新增redirect回调,确保登录成功后优先使用传入的callbackUrl:

import NextAuth from "next-auth"
import Google from "next-auth/providers/google"
import { supabase } from "@/lib/supabase"

export const { handlers, auth, signIn, signOut } = NextAuth({
    providers: [Google],
    callbacks: {
        async signIn({ user }) {
            const { data, error } = await supabase
                .from('stores')
                .select()
                .eq('email', user.email)
                .single()

            if (error || !data) {
                return '/error'
            }

            return true
        },
        // 新增redirect回调
        async redirect({ callbackUrl, baseUrl }) {
            // 确保callbackUrl是同域名的合法地址
            if (callbackUrl.startsWith(baseUrl)) {
                return callbackUrl
            }
            // fallback到首页(可选,根据你的需求调整)
            return baseUrl
        }
    },
    pages: {
        error: '/error'
    }
})

额外检查点

  • 确认Google OAuth应用的回调URL配置正确:本地环境应为http://localhost:3000/api/auth/callback/google,生产环境替换成你的实际域名
  • 检查你的middleware.js,确保它没有错误地将已登录用户重定向回首页
  • 打开浏览器开发者工具的网络面板,查看Google授权完成后的回调请求,确认返回的302跳转地址是否为/dashboard/inventory

备注:内容来源于stack exchange,提问作者mukunda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:49:50