next.js 为什么在getserversideprops内部的获取调用后不重定向工作

wbrvyc0a  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(139)

我面临的主要问题是,每当我在获取函数之外调用重定向时,它都能工作,但一旦我将该重定向放在获取函数的响应中,它就不会重定向页面。your text
我试着允许google sign up为用户创建帐户。如果用户使用google sign in,它允许用户进入newaccount.js文件。一旦进入该路径,它会检查数据库中是否存在google用户名。如果存在,它会将用户重定向到主页。如果不存在,它会要求用户输入密码,并将用户名和密码保存在数据库中。
代码:

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

        let username = session.user.name
        let email = session.user.email
        let body = { username, email }
        await fetch("http://localhost:3000/api/checkuser", {
            method: "POST",
            body: JSON.stringify(body),
        }).then((res) => res.json())
            .then((result) => {
                console.log(result)
                if (result.success == true) {
                    if (result.exists == false) {
                        console.log("user added success fully")
                    } else {
                        return {
                            redirect: {
                                destination: '/',
                                permanent: false
                            }
                        }
                    }
                } else {
                    console.log("something went wrong")
                }
            });
    }

    return {
        props: { session }
    }
}
lztngnrs

lztngnrs1#

您的代码没有在else语句中返回redirect。解决此问题的一种方法是对所有异步操作执行await-ing,如下所示:

} else {
  let username = session.user.name
  let email = session.user.email
  let body = { username, email }
  const response = await fetch("http://localhost:3000/api/checkuser", {
    method: "POST",
    body: JSON.stringify(body),
  })
  const result = await res.json()
  console.log(result)
  if (result.success == true) {
    if (result.exists == false) {
      console.log("user added success fully")
    } else {
      return {
        redirect: {
          destination: '/',
          permanent: false
        }
      }
    }
  } else {
    console.log("something went wrong")
  }
}

相关问题