mirror of
https://github.com/logto-io/logto.git
synced 2025-01-13 21:30:30 -05:00
fix(core): fix session not found redirect hostname (#4018)
This commit is contained in:
parent
019cb6cadd
commit
160f861800
2 changed files with 25 additions and 4 deletions
|
@ -1,7 +1,8 @@
|
||||||
import { createMockUtils } from '@logto/shared/esm';
|
import { createMockUtils } from '@logto/shared/esm';
|
||||||
import Provider from 'oidc-provider';
|
import Provider from 'oidc-provider';
|
||||||
|
import Sinon from 'sinon';
|
||||||
|
|
||||||
import { UserApps } from '#src/env-set/index.js';
|
import { EnvSet, UserApps } from '#src/env-set/index.js';
|
||||||
import { MockQueries } from '#src/test-utils/tenant.js';
|
import { MockQueries } from '#src/test-utils/tenant.js';
|
||||||
import { createContextWithRouteParameters } from '#src/utils/test-utils.js';
|
import { createContextWithRouteParameters } from '#src/utils/test-utils.js';
|
||||||
|
|
||||||
|
@ -100,4 +101,18 @@ describe('koaSpaSessionGuard', () => {
|
||||||
await koaSpaSessionGuard(provider, queries)(ctx, next);
|
await koaSpaSessionGuard(provider, queries)(ctx, next);
|
||||||
expect(ctx.redirect).toBeCalledWith('https://foo.bar');
|
expect(ctx.redirect).toBeCalledWith('https://foo.bar');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it(`should redirect to current hostname if isDomainBasedMultiTenancy`, async () => {
|
||||||
|
const stub = Sinon.stub(EnvSet, 'values').value({
|
||||||
|
...EnvSet.values,
|
||||||
|
isDomainBasedMultiTenancy: true,
|
||||||
|
});
|
||||||
|
interactionDetails.mockRejectedValue(new Error('session not found'));
|
||||||
|
const ctx = createContextWithRouteParameters({
|
||||||
|
url: '/sign-in/foo',
|
||||||
|
});
|
||||||
|
await koaSpaSessionGuard(provider, queries)(ctx, next);
|
||||||
|
expect(ctx.redirect).toBeCalledWith('https://test.com/unknown-session');
|
||||||
|
stub.restore();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -55,9 +55,15 @@ export default function koaSpaSessionGuard<
|
||||||
throw new RequestError({ code: 'session.not_found', status: 404 });
|
throw new RequestError({ code: 'session.not_found', status: 404 });
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.redirect(
|
const tenantEndpoint = getTenantEndpoint(tenantId, EnvSet.values);
|
||||||
appendPath(getTenantEndpoint(tenantId, EnvSet.values), sessionNotFoundPath).href
|
|
||||||
);
|
if (EnvSet.values.isDomainBasedMultiTenancy) {
|
||||||
|
// Replace to current hostname (if custom domain is used)
|
||||||
|
// eslint-disable-next-line @silverhand/fp/no-mutation
|
||||||
|
tenantEndpoint.hostname = ctx.request.hostname;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.redirect(appendPath(tenantEndpoint, sessionNotFoundPath).href);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue