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

getServerSideProps中fetch回调内redirect不生效问题排查

问题原因

你这个问题的核心是回调函数的返回值无法传递到外层的getServerSideProps。你用.then()链式处理fetch响应时,回调里的return {redirect: ...}只是返回给了当前的.then()回调函数,并没有成为getServerSideProps的返回值。而函数最后总会执行return {props: { session }},导致重定向逻辑被覆盖,无法生效。

解决方案

把.then()链式调用改成async/await写法,这样就能在获取到接口响应后,直接在getServerSideProps函数体内返回重定向对象,中断后续代码执行:

export async function getServerSideProps({ req, res }) {
    const session = await getSession({ req })
    if (!session) {
        console.log("this not running")
        return {
            redirect: {
                destination: '/',
                permanent: false
            }
        }
    }

    const username = session.user.name
    const email = session.user.email
    const body = { username, email }
    
    // 用await替代.then(),直接获取响应结果
    const fetchRes = await fetch("http://localhost:3000/api/checkuser", {
        method: "POST",
        headers: { 'Content-Type': 'application/json' }, // 必须添加该头,确保后端能解析JSON
        body: JSON.stringify(body),
    })
    const result = await fetchRes.json()
    
    console.log(result)
    if (result.success === true) {
        if (result.exists) {
            // 直接返回重定向对象,函数到此结束,不会执行最后的return
            return {
                redirect: {
                    destination: '/',
                    permanent: false
                }
            }
        } else {
            console.log("user added success fully")
        }
    } else {
        console.log("something went wrong")
    }

    return {
        props: { session }
    }
}
额外注意点
  • 发送JSON格式的POST请求时,必须添加Content-Type: application/json请求头,否则后端接口可能无法正确解析你传递的JSON数据。
  • 建议用===做全等判断,避免隐式类型转换带来的意外问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:30:59