我遇到以下问题,我需要更改自定义基本路径才能使下一次身份验证正常工作。我的应用程序已经有一个用于后端服务器的端点 api/auth,所以我开始寻找这个问题的解决方案。
按照文档 - https://next-auth.js.org/configuration/options#nextauth_url 并提出问题 - NEXTAUTH_URL 不起作用时如何定义自定义基本路径?
下面是一个简单的实现示例代码
import type { AuthOptions } from "next-auth";
import GoogleProvider from "next-auth/providers/google";
export const authConfig: AuthOptions = {
providers: [
GoogleProvider({
clientId: process.env.AUTH_GOOGLE_ID!,
clientSecret: process.env.AUTH_GOOGLE_SECRET!,
}),
],
secret: process.env.NEXTAUTH_SECRET!,
pages: {
signIn: "/signin",
},
};
<SessionProvider session={pageProps.session} basePath="/next/api/auth">
# Auth Providers
AUTH_GOOGLE_ID=
AUTH_GOOGLE_SECRET=
# Auth config
NEXTAUTH_SECRET=
NEXTAUTH_URL="site/next/api/auth"
我将不胜感激任何帮助和建议来解决这个问题。
我更改了 (next/api/auth) 中的 NEXTAUTH_URL (site/next/api/auth) 和 basePath 的值
这在我的情况下根本不起作用,并且我收到错误,因为下一个身份验证无法在此地址找到任何内容。我做错了什么以及它应该如何工作? 获取网站/next/api/auth/session 404(未找到) client.js:1 [下一个身份验证][错误][CLIENT_FETCH_ERROR]
尝试在应用程序和页面路由中解决这个问题并得到相同的结果。这个问题似乎在最新的测试版(5.0.0-beta.4)中消失了,但如果可能的话,我想使用更稳定的版本,因为如果没有适当的文档,很难从[迁移我的所有方法。 ..nextauth].ts 之前的当前版本。
我在这里回答了类似的问题:
综上所述,目前这仍然是 next-auth v5 beta 中的一个问题。您可以在以下位置阅读它们:
第一个链接中的两个解决方法是:
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的解决方案(来源):
// 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); };