如何在NextAuth的signOut事件中实现页面重定向?
解决NextAuth.js signOut事件中重定向的NEXT_REDIRECT错误
问题原因
Next.js的redirect函数通过抛出NEXT_REDIRECT错误触发路由跳转,但Auth.js(原NextAuth.js)的signOut事件处理函数不会捕获该错误,直接调用会导致错误暴露。
解决方案
在客户端环境的事件处理函数中,改用浏览器原生跳转方法直接操作window.location,替代Next.js的redirect函数:
修改后的代码:
events: { signOut: async function ({ token }) { const logoutToken = token as unknown as any const tokenResponse = await fetch( `${process.env.NEXT_API_URL}/auth/logout`, { method: 'POST', headers: { 'Cookie': cookieList(logoutToken), 'Content-Type': 'application/json', Authorization: `Bearer ${logoutToken.accessToken}`, }, }, ); const json = await tokenResponse.json() // 替换redirect,用原生浏览器跳转 window.location.href = json.url; // 根据后端实际返回的URL字段名调整,比如可能是redirectUrl }, },
补充说明
- 若需跳转后不保留当前页面在浏览器历史记录,可替换为
window.location.replace(json.url) - 确认后端返回的
json数据中包含正确的跳转URL字段,根据实际接口返回调整字段名称
内容的提问来源于stack exchange,提问作者Kerchik
相关产品推荐
相关产品推荐

