Skip to content

Commit e39d549

Browse files
authored
Merge pull request #43 from kinde-oss/leo/same_state
Use state if existing in session
2 parents 943f759 + 5b56d07 commit e39d549

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

lib/__tests__/sdk/oauth2-flows/AuthorizationCode.spec.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,19 @@ describe('AuthorizationCode', () => {
9696
const state = searchParams.get('state');
9797
expect(state).toBe(expectedState);
9898
});
99+
100+
it('uses same state to generate authorization URL if existing in session', async () => {
101+
const client = new AuthorizationCode(clientConfig, clientSecret);
102+
const authURL = await client.createAuthorizationURL(sessionManager);
103+
const searchParams = new URLSearchParams(authURL.search);
104+
const firstState = searchParams.get('state');
105+
106+
const authURL2 = await client.createAuthorizationURL(sessionManager);
107+
const searchParams2 = new URLSearchParams(authURL2.search);
108+
const secondState = searchParams2.get('state');
109+
110+
expect(firstState).toBe(secondState);
111+
});
99112
});
100113

101114
describe('handleRedirectFromAuthDomain()', () => {

lib/sdk/oauth2-flows/AuthorizationCode.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,12 @@ export class AuthorizationCode extends AuthCodeAbstract {
3636
sessionManager: SessionManager,
3737
options: AuthURLOptions = {}
3838
): Promise<URL> {
39-
this.state = options.state ?? utilities.generateRandomString();
39+
this.state =
40+
options.state ??
41+
((await sessionManager.getSessionItem(
42+
AuthorizationCode.STATE_KEY
43+
)) as string) ??
44+
utilities.generateRandomString();
4045
await sessionManager.setSessionItem(AuthorizationCode.STATE_KEY, this.state);
4146
const authURL = new URL(this.authorizationEndpoint);
4247
const authParams = this.generateAuthURLParams(options);

0 commit comments

Comments
 (0)