我最近从 next auth v4 升级到 v5 [5.0.0 beta.18] 。我在 next.config.js 文件中设置了基本路径 ['/ui/abc']。我正在使用天蓝色的广告提供商,并且在调用登录时,该路线没有获取我的应用程序的基本路径。如何设置 v5 身份验证的基本路径?从 next.config.js 文件中删除 basePath 后,身份验证按预期工作。
我尝试在providers数组下方的auth.ts文件中设置basePath,并删除了NEXTAUTH_URL表单.env文件,如docs
中给出的这里有一个开放的拉取请求总结了该问题:
更多讨论在这里:
从拉取请求的第一个链接中,建议的两个替代方案是:
安装 @k3k8 使用他们的说明建议的测试包(source):
...您可以使用以下方法测试我的代码:
git clone -b fix-base-path https://github.com/k3k8/next-auth.git cd next-auth corepack enable pnpm pnpm install pnpm build cd packages/next-auth/ pnpm pack
这将生成一个名为
的包文件。next-auth-5.0.0-beta.20.tgz
将此文件移动到您的项目目录并通过更新您的
: 来安装它package.json
{ "dependencies": { "next-auth": "./next-auth-5.0.0-beta.20.tgz" } }
然后运行
来更新您的依赖项。pnpm install
使用@ThangHuuVu的解决方法(source):
...我的解决方法基本上是附加基本路径,如下所示:
// app/api/auth/[...nextauth]/route.ts import { handlers } from "auth"; import { NextRequest } from "next/server"; const reqWithBasePath = (req: NextRequest, basePath = "/authjs") => { const baseUrl = new URL( (req.headers.get("x-forwarded-proto") ?? "https") + "://" + (req.headers.get("x-forwarded-host") ?? req.nextUrl.host) ); const urlWithBasePath = new URL( `${basePath}${req.nextUrl.pathname}${req.nextUrl.search}`, baseUrl ); return new NextRequest(urlWithBasePath.toString(), req); }; export const GET = (req: NextRequest) => { const nextReq = reqWithBasePath(req); return handlers.GET(nextReq); }; export const POST = (req: NextRequest) => { const nextReq = reqWithBasePath(req); return handlers.POST(nextReq); };