next.js 下一个身份验证不适用于自定义basePath

wj8zmpe1  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(176)

我的NextAuth在凭据提供程序自定义登录时搜索api/auth/session时返回404,似乎Next Auth指向了错误的URL。
我的next.config.js有一个指向子文件夹basePath: '/twenty-test'的basePath,并且我的NEXTAUTH_URL已经设置为我的子域,但是当我转到我的凭据提供程序登录自定义页面时(该页面在localhost上工作,因为它不在子域中),我在https://explample.com/api/auth/session 404之类的控制台上看到一个404错误。
这是我的自定义提供程序配置:

providers: [
    CredentialProvider({
        name: 'Credentials',
        type: 'credentials',
        async authorize(credentials) {
            // 
            if(credentials.email == "john@gmail.com" && credentials.password == "test"){
                return {
                    id: 2,
                    name: 'John Doe',
                    email: 'john@gmail.com',
                    permition: {
                        group: 2,
                        level: 0
                    }
                }
            }

            return null;
        }

    })
],

这是我的next.config.js

const nextConfig = {
  reactStrictMode: true,
  basePath: '/twenty-test',
  images: {
    domains: ['example.com'],
  },
}

module.exports = nextConfig

这是我的NEXTAUTH_URL环境变量

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

这是我的getCsrfToken配置

export async function getServerSideProps(context) {
return {
    props: {
        csrfToken: await getCsrfToken(context)
    }
}
}

我的项目不在vercel上。我正在使用自定义服务器配置来部署cPanel

yb3bgrhw

yb3bgrhw1#

问题在于在localhost中构建应用程序并在服务器上部署。
应用程序正在构建,预期NEXTAUTH_URL为localhost,简单地更改服务器上的.env变量不起作用。
解决方案是在服务器上构建应用程序。
另一种解决方法是在构建后使用服务器上的NEXTAUTH_URL值替换本地主机NEXTAUTH_URL ocurrences。

相关问题