diff --git a/packages/runtime/src/index.ts b/packages/runtime/src/index.ts index f15bf13192..d420d5549b 100644 --- a/packages/runtime/src/index.ts +++ b/packages/runtime/src/index.ts @@ -121,10 +121,20 @@ const plugin: NetlifyPlugin = { if (userDefinedNextAuthUrl) { console.log( - `NextAuth package detected, NEXTAUTH_URL environment variable set by user to ${userDefinedNextAuthUrl}`, + `NextAuth package detected, NEXTAUTH_URL environment variable set by user in next.config.js to ${userDefinedNextAuthUrl}`, ) + } else if (process.env.NEXTAUTH_URL) { + // When the value is specified in the netlify.toml or the Netlify UI (will be evaluated in this order) + const nextAuthUrl = `${process.env.NEXTAUTH_URL}${basePath}` + + console.log( + `NextAuth package detected, NEXTAUTH_URL environment variable set by user in Netlify configuration to ${nextAuthUrl}`, + ) + config.config.env.NEXTAUTH_URL = nextAuthUrl + + await updateRequiredServerFiles(publish, config) } else { - const nextAuthUrl = `${process.env.URL}${basePath}` + const nextAuthUrl = `${process.env.DEPLOY_PRIME_URL}${basePath}` console.log(`NextAuth package detected, setting NEXTAUTH_URL environment variable to ${nextAuthUrl}`) config.config.env.NEXTAUTH_URL = nextAuthUrl diff --git a/test/index.js b/test/index.js index 1a92b6d487..37ebeed60b 100644 --- a/test/index.js +++ b/test/index.js @@ -230,12 +230,12 @@ describe('onBuild()', () => { }) afterEach(() => { - delete process.env.URL + delete process.env.DEPLOY_PRIME_URL }) test('does not set NEXTAUTH_URL if value is already set', async () => { const mockUserDefinedSiteUrl = chance.url() - process.env.URL = chance.url() + process.env.DEPLOY_PRIME_URL = chance.url() await moveNextDist() @@ -252,13 +252,28 @@ describe('onBuild()', () => { expect(config.config.env.NEXTAUTH_URL).toEqual(mockUserDefinedSiteUrl) }) + test('sets the NEXTAUTH_URL specified in the netlify.toml or in the Netlify UI', async () => { + const mockSiteUrl = chance.url() + process.env.NEXTAUTH_URL = mockSiteUrl + + await moveNextDist() + + await nextRuntime.onBuild(defaultArgs) + + expect(onBuildHasRun(netlifyConfig)).toBe(true) + const config = await getRequiredServerFiles(netlifyConfig.build.publish) + + expect(config.config.env.NEXTAUTH_URL).toEqual(mockSiteUrl) + delete process.env.NEXTAUTH_URL + }) + test('sets NEXTAUTH_URL when next-auth package is detected', async () => { const mockSiteUrl = chance.url() // Value represents the main address to the site and is either // a Netlify subdomain or custom domain set by the user. // See https://docs.netlify.com/configure-builds/environment-variables/#deploy-urls-and-metadata - process.env.URL = mockSiteUrl + process.env.DEPLOY_PRIME_URL = mockSiteUrl await moveNextDist() @@ -272,7 +287,7 @@ describe('onBuild()', () => { test('includes the basePath on NEXTAUTH_URL when present', async () => { const mockSiteUrl = chance.url() - process.env.URL = mockSiteUrl + process.env.DEPLOY_PRIME_URL = mockSiteUrl await moveNextDist()