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

Next-auth重定向异常:错误凭证后跳转/api/auth/error而非自定义页面

NextAuth 错误重定向与字节字符串转换问题解决

问题描述

  • 已配置NextAuth的pages选项:
pages: {
  signIn: "/admin/login",
  error: "/admin/login",
},
  • 输入错误凭证后,未在/admin/login页面展示错误,反而重定向到/api/auth/error
  • 终端出现以下错误(已翻译为中文):
错误 TypeError: 无法将参数转换为ByteString,因为索引45处的字符值为273,大于255。
    在 webidl.converters.ByteString (node:internal/deps/undici/undici:1578:17)
    在 Headers.set (node:internal/deps/undici/undici:1877:35)
    在 toResponse (webpack-internal:///(sc_server)/./node_modules/next-auth/next/utils.js:52:40)
    在 NextAuthRouteHandler (webpack-internal:///(sc_server)/./node_modules/next-auth/next/index.js:65:44)
    在 process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    在 async NextAuth._args$ (webpack-internal:///(sc_server)/./node_modules/next-auth/next/index.js:83:24)
    在 async eval (webpack-internal:///(sc_server)/./node_modules/next/dist/server/future/route-modules/app-route/module.js:249:37)

错误分析

这个字节字符串转换错误是核心问题,直接导致NextAuth无法正常执行重定向逻辑, fallback 到默认的/api/auth/error页面。问题根源是响应头中混入了非ASCII字符(比如索引45处的字符值273,对应Unicode字符ĭ),而HTTP协议要求响应头必须是ASCII范围内的字节字符串。

这类情况通常出现在自定义登录逻辑、NextAuth回调函数(如signIn、jwt、session)中,返回的错误信息、用户数据或手动设置的响应头包含了非ASCII字符,触发了undici库的校验报错。

解决方案

1. 清理所有非ASCII字符

检查NextAuth相关的所有逻辑,确保返回的错误提示、用户数据、响应头值都仅包含ASCII字符:

// 错误示例:包含非ASCII字符
throw new Error("用户名或密码错误,请重试ĭ");
// 修正后
throw new Error("用户名或密码错误,请重试");

2. 确保错误页正确接收并展示错误信息

确认/admin/login页面能获取NextAuth传递的错误参数:

import { useRouter } from 'next/router';

export default function LoginPage() {
  const router = useRouter();
  const error = router.query.error;

  return (
    <div>
      {error && <p className="text-red-500">登录失败:{error}</p>}
      {/* 登录表单代码 */}
    </div>
  );
}

3. 升级NextAuth到稳定版

部分旧版本存在响应头处理的兼容性bug,升级到最新稳定版可解决此类问题。

4. 检查自定义响应头设置

如果在中间件或自定义API路由中手动设置了响应头,确保所有头信息的值都是纯ASCII字符,避免特殊符号或非英文字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:37:22