You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

配置自定义basePath后Next Auth凭证登录出现api/auth/session 404错误求助

解决Next Auth Credential Provider下/api/auth/session 404错误(带basePath的cPanel部署)

看起来你遇到的问题核心是Next Auth没有正确适配你设置的basePath,尤其是在非Vercel的cPanel环境下,需要额外调整配置和服务器规则。下面是一步步的解决方案:

1. 修正NEXTAUTH_URL环境变量配置

你当前的NEXTAUTH_URL设置成了https://example.com/twenty-test/api/auth,这是错误的。Next Auth会自动在NEXTAUTH_URL后拼接/api/auth路径,所以正确的配置应该只包含basePath的根路径:

NEXTAUTH_URL="https://example.com/twenty-test"

如果保留原配置,Next Auth会生成重复的路径(/twenty-test/api/auth/api/auth),这直接导致了404错误。

2. 显式配置Next Auth的basePath

在你的[...nextauth].js配置文件中,虽然Next Auth理论上会自动读取basePath,但显式指定basePath参数可以强制适配,避免路径解析异常:

import NextAuth from "next-auth"
import CredentialsProvider from "next-auth/providers/credentials"

export default NextAuth({
  providers: [
    CredentialProvider({
      // 你的现有配置...
      name: 'Credentials',
      type: 'credentials',
      async authorize(credentials) {
        return {
          id: 2,
          name: 'John Doe',
          email: 'john@gmail.com',
          permition: { group: 2, level: 0 }
        }
      }
    })
  ],
  // 显式指定basePath
  basePath: "/twenty-test/api/auth",
  // 建议保留jwt策略,适配无数据库场景
  session: {
    strategy: "jwt"
  }
})

3. 调整cPanel的.htaccess配置(关键!)

因为你是在cPanel部署自定义Next.js服务器,必须确保/.htaccess文件正确处理basePath的路由转发。创建或修改项目根目录的.htaccess文件,添加以下规则:

RewriteEngine On
# 设置RewriteBase为你的basePath
RewriteBase /twenty-test/

# 直接访问根路径时跳转到index.html
RewriteRule ^$ index.html [L]

# 静态资源直接返回,非静态资源转发到index.html(Next.js的SPA路由)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]

如果没有正确设置RewriteBase,cPanel的服务器会无法将带/twenty-test前缀的请求转发到你的Next应用,导致Auth接口无法被正确解析。

4. 验证环境变量与请求路径

在自定义登录页的getServerSideProps中添加调试代码,确认环境变量是否正确加载:

export async function getServerSideProps(context) {
  console.log("NEXTAUTH_URL:", process.env.NEXTAUTH_URL);
  console.log("Current Request Path:", context.resolvedUrl);
  return {
    props: {
      csrfToken: await getCsrfToken(context)
    }
  }
}

如果打印的NEXTAUTH_URL不是https://example.com/twenty-test,说明环境变量没有在cPanel中生效,你可以在.htaccess中手动添加:

SetEnv NEXTAUTH_URL "https://example.com/twenty-test"

5. 清除缓存并重新部署

最后,清除cPanel的服务器缓存,重新上传项目代码,确保所有配置变更都生效。旧缓存可能会导致配置不更新,引发路径错误。

按照以上步骤调整后,/api/auth/session接口应该会正确请求https://example.com/twenty-test/api/auth/session,解决404问题。

内容的提问来源于stack exchange,提问作者Luis Felipe R. Hübner

火山引擎 最新活动