Skip to content

Commit 7e55667

Browse files
authored
fix(runtime): trust dev loopback aliases for inferred origins (#313)
1 parent ff306be commit 7e55667

2 files changed

Lines changed: 33 additions & 15 deletions

File tree

src/runtime/server/utils/auth.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,8 @@ function getRequestOrigin(request?: Request): string | undefined {
242242

243243
function withDevTrustedOrigins(
244244
trustedOrigins: BetterAuthOptions['trustedOrigins'] | undefined,
245-
hasExplicitSiteUrl: boolean,
246245
): BetterAuthOptions['trustedOrigins'] | undefined {
247-
if (!import.meta.dev || !hasExplicitSiteUrl)
246+
if (!import.meta.dev)
248247
return trustedOrigins
249248

250249
const devOrigins = getDevTrustedOrigins()
@@ -287,7 +286,7 @@ export function serverAuth(event?: H3Event): AuthInstance {
287286

288287
const database = createDatabase(event)
289288
const userConfig = createServerAuth({ runtimeConfig, db, requestOrigin }) as UserAuthConfig
290-
const trustedOrigins = withDevTrustedOrigins(userConfig.trustedOrigins, Boolean(hasExplicitSiteUrl))
289+
const trustedOrigins = withDevTrustedOrigins(userConfig.trustedOrigins)
291290

292291
const hubSecondaryStorage = (runtimeConfig.auth as { hubSecondaryStorage?: boolean | 'custom' })?.hubSecondaryStorage
293292
const customSecondaryStorage = resolveCustomSecondaryStorageRequirement(hubSecondaryStorage, userConfig.secondaryStorage != null, Boolean(import.meta.dev))

test/get-base-url.test.ts

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -179,9 +179,9 @@ function getRequestOrigin(request?: Request): string | undefined {
179179

180180
function withDevTrustedOrigins(
181181
trustedOrigins: TrustedOrigins,
182-
options: GetNitroOriginOptions & { hasExplicitSiteUrl: boolean },
182+
options: GetNitroOriginOptions,
183183
): TrustedOrigins {
184-
if (!options.isDev || !options.hasExplicitSiteUrl)
184+
if (!options.isDev)
185185
return trustedOrigins
186186

187187
const devOrigins = getDevTrustedOrigins(options)
@@ -307,7 +307,6 @@ describe('withDevTrustedOrigins', () => {
307307
const trustedOrigins = withDevTrustedOrigins(undefined, {
308308
isDev: true,
309309
isPrerender: false,
310-
hasExplicitSiteUrl: true,
311310
env: {
312311
__NUXT_DEV__: JSON.stringify({ proxy: { url: 'http://127.0.0.1:4123' } }),
313312
},
@@ -324,7 +323,6 @@ describe('withDevTrustedOrigins', () => {
324323
const trustedOrigins = withDevTrustedOrigins(['https://foo.workers.dev', 'http://localhost:3001'], {
325324
isDev: true,
326325
isPrerender: false,
327-
hasExplicitSiteUrl: true,
328326
env: {
329327
NITRO_HOST: 'localhost',
330328
NITRO_PORT: '3001',
@@ -343,7 +341,6 @@ describe('withDevTrustedOrigins', () => {
343341
const trustedOrigins = withDevTrustedOrigins(trustedOriginsFn, {
344342
isDev: true,
345343
isPrerender: false,
346-
hasExplicitSiteUrl: true,
347344
env: {
348345
NITRO_HOST: '192.168.1.50',
349346
NITRO_PORT: '3002',
@@ -363,7 +360,6 @@ describe('withDevTrustedOrigins', () => {
363360
const trustedOrigins = withDevTrustedOrigins(undefined, {
364361
isDev: true,
365362
isPrerender: false,
366-
hasExplicitSiteUrl: true,
367363
env: {
368364
NITRO_HOST: '0.0.0.0',
369365
NITRO_PORT: '3000',
@@ -384,7 +380,6 @@ describe('withDevTrustedOrigins', () => {
384380
const trustedOrigins = withDevTrustedOrigins(undefined, {
385381
isDev: false,
386382
isPrerender: false,
387-
hasExplicitSiteUrl: true,
388383
env: {
389384
NITRO_HOST: 'localhost',
390385
NITRO_PORT: '3000',
@@ -394,18 +389,42 @@ describe('withDevTrustedOrigins', () => {
394389
expect(trustedOrigins).toBeUndefined()
395390
})
396391

397-
it('does not augment when siteUrl is not explicit', () => {
398-
const configuredTrustedOrigins = ['https://foo.workers.dev']
399-
const trustedOrigins = withDevTrustedOrigins(configuredTrustedOrigins, {
392+
it('augments even when siteUrl is inferred', async () => {
393+
const trustedOrigins = withDevTrustedOrigins(['https://foo.workers.dev'], {
400394
isDev: true,
401395
isPrerender: false,
402-
hasExplicitSiteUrl: false,
403396
env: {
404397
NITRO_HOST: 'localhost',
405398
NITRO_PORT: '3000',
406399
},
407400
})
408401

409-
expect(trustedOrigins).toBe(configuredTrustedOrigins)
402+
expect(typeof trustedOrigins).toBe('function')
403+
if (typeof trustedOrigins !== 'function')
404+
throw new Error('trustedOrigins should be a function')
405+
406+
const resolvedOrigins = await trustedOrigins()
407+
expect(resolvedOrigins).toEqual(['https://foo.workers.dev', 'http://localhost:3000'])
408+
})
409+
410+
it('adds loopback request origins regardless of alias order', async () => {
411+
const trustedOrigins = withDevTrustedOrigins(undefined, {
412+
isDev: true,
413+
isPrerender: false,
414+
env: {
415+
NITRO_HOST: 'localhost',
416+
NITRO_PORT: '3000',
417+
},
418+
})
419+
420+
expect(typeof trustedOrigins).toBe('function')
421+
if (typeof trustedOrigins !== 'function')
422+
throw new Error('trustedOrigins should be a function')
423+
424+
const localhostRequestOrigins = await trustedOrigins(new Request('http://localhost:3000/api/auth/sign-in'))
425+
const loopbackRequestOrigins = await trustedOrigins(new Request('http://127.0.0.1:3000/api/auth/sign-in'))
426+
427+
expect(localhostRequestOrigins).toEqual(['http://localhost:3000'])
428+
expect(loopbackRequestOrigins).toEqual(['http://localhost:3000', 'http://127.0.0.1:3000'])
410429
})
411430
})

0 commit comments

Comments
 (0)