NEXTAUTH_URL 不起作用(nextauth 重定向到自定义路径)

问题描述 投票:0回答:1

我遇到以下问题,我需要更改自定义基本路径才能使下一次身份验证正常工作。我的应用程序已经有一个用于后端服务器的端点 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.js next-auth
1个回答
0
投票

我在这里回答了类似的问题:

综上所述,目前这仍然是 next-auth v5 beta 中的一个问题。您可以在以下位置阅读它们:

第一个链接中的两个解决方法是:

  1. @k3k8解决方案(来源):

    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

  2. @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);
    };
    

    https://github.com/ThangHuuVu/next-auth-behind-proxy/blob/cde4368b46fbda57157d62eaf1b93b258f5fadde/app/api/auth/%5B...nextauth%5D/route.ts

© www.soinside.com 2019 - 2024. All rights reserved.