Skip to content

Commit ba47ce8

Browse files
committed
chore(oidc-client): update user.info
1 parent 4d4be08 commit ba47ce8

File tree

6 files changed

+38
-13
lines changed

6 files changed

+38
-13
lines changed

e2e/oidc-app/src/ping-am/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<style>
77
#logout,
8-
#userinfo {
8+
#user-info-btn {
99
display: none;
1010
}
1111
</style>
@@ -19,7 +19,7 @@ <h1>OIDC App | PingAM Login</h1>
1919
<button id="get-tokens">Get Tokens</button>
2020
<button id="renew-tokens">Renew Tokens</button>
2121
<button id="logout">Logout</button>
22-
<button id="userinfo">User Info</button>
22+
<button id="user-info-btn">User Info</button>
2323
<a href="/ping-am/">Start Over</a>
2424
</div>
2525
<script type="module" src="./main.ts"></script>

e2e/oidc-app/src/ping-one/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<style>
77
#logout,
8-
#userinfo {
8+
#user-info-btn {
99
display: none;
1010
}
1111
</style>
@@ -19,7 +19,7 @@ <h1>OIDC App | P1 Login</h1>
1919
<button id="get-tokens">Get Tokens</button>
2020
<button id="renew-tokens">Renew Tokens</button>
2121
<button id="logout">Logout</button>
22-
<button id="userinfo">User Info</button>
22+
<button id="user-info-btn">User Info</button>
2323
<a href="/ping-one/">Start Over</a>
2424
</div>
2525
<script type="module" src="./main.ts"></script>

e2e/oidc-app/src/utils/oidc-app.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ function displayTokenResponse(
3333
} else {
3434
console.log('Token Response:', response);
3535
document.getElementById('logout').style.display = 'block';
36-
document.getElementById('userinfo').style.display = 'block';
36+
document.getElementById('user-info-btn').style.display = 'block';
3737
document.getElementById('login-background').style.display = 'none';
3838
document.getElementById('login-redirect').style.display = 'none';
3939

@@ -108,10 +108,10 @@ export async function oidcApp({ config, urlParams }) {
108108
displayTokenResponse(response);
109109
});
110110

111-
document.getElementById('userinfo').addEventListener('click', async () => {
111+
document.getElementById('user-info-btn').addEventListener('click', async () => {
112112
const userInfo = await oidcClient.user.info();
113113

114-
if ('error' in userInfo) {
114+
if (typeof userInfo === 'object' && 'error' in userInfo) {
115115
console.error('User Info Error:', userInfo);
116116
displayError(userInfo);
117117
} else {
@@ -133,7 +133,7 @@ export async function oidcApp({ config, urlParams }) {
133133
} else {
134134
console.log('Logout successful');
135135
document.getElementById('logout').style.display = 'none';
136-
document.getElementById('userinfo').style.display = 'none';
136+
document.getElementById('user-info-btn').style.display = 'none';
137137
document.getElementById('login-background').style.display = 'block';
138138
document.getElementById('login-redirect').style.display = 'block';
139139
window.location.assign(window.location.origin + window.location.pathname);

e2e/oidc-suites/src/user.spec.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,29 @@ test.describe('User tests', () => {
5757
await expect(page.getByText('demouser')).toBeVisible();
5858
await expect(page.getByText('[email protected]')).toBeVisible();
5959
});
60+
61+
test('get user info should error with missing token', async ({ page }) => {
62+
const { navigate, clickButton } = asyncEvents(page);
63+
await navigate('/ping-am/');
64+
expect(page.url()).toBe('http://localhost:8443/ping-am/');
65+
66+
await clickButton('Login (Background)', 'https://openam-sdks.forgeblocks.com/');
67+
68+
await page.getByLabel('User Name').fill(pingAmUsername);
69+
await page.getByRole('textbox', { name: 'Password' }).fill(pingAmPassword);
70+
await page.getByRole('button', { name: 'Next' }).click();
71+
72+
await page.waitForURL('http://localhost:8443/ping-am/**');
73+
expect(page.url()).toContain('code');
74+
expect(page.url()).toContain('state');
75+
await expect(page.locator('#accessToken-0')).not.toBeEmpty();
76+
await expect(page.locator('#accessToken-0')).not.toHaveText('undefined');
77+
78+
await page.evaluate(() => window.localStorage.clear());
79+
await page.getByRole('button', { name: 'User Info' }).click();
80+
81+
await expect(page.locator('#userInfo')).not.toBeVisible();
82+
await expect(page.locator('.error')).toContainText(`"error": "No access token found"`);
83+
await expect(page.locator('.error')).toContainText(`"type": "auth_error"`);
84+
});
6085
});

packages/oidc-client/src/lib/client.store.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import type { GenericError, GetAuthorizationUrlOptions } from '@forgerock/sdk-ty
2222
import type { GetTokensOptions, LogoutResult } from './client.types.js';
2323
import type { OauthTokens, OidcConfig } from './config.types.js';
2424
import type { AuthorizationError, AuthorizationSuccess } from './authorize.request.types.js';
25-
import type { TokenExchangeErrorResponse, TokenExchangeResponse } from './exchange.types.js';
25+
import type { TokenExchangeErrorResponse } from './exchange.types.js';
2626
import { isExpiryWithinThreshold } from './token.utils.js';
2727
import { logoutµ } from './logout.request.js';
2828

@@ -305,9 +305,9 @@ export async function oidc<ActionType extends ActionTypes = ActionTypes>({
305305
* @method info
306306
* @description Retrieves user information using the userinfo endpoint from the wellknown configuration.
307307
* It requires an access token stored in the configured storage.
308-
* @returns {Promise<GenericError | TokenExchangeResponse>} - Returns a promise that resolves to user information or an error response.
308+
* @returns {Promise<GenericError | unknown>} - Returns a promise that resolves to user information or an error response.
309309
*/
310-
info: async (): Promise<GenericError | TokenExchangeResponse> => {
310+
info: async (): Promise<GenericError | unknown> => {
311311
const state = store.getState();
312312
const wellknown = wellknownSelector(wellknownUrl, state);
313313

packages/oidc-client/src/lib/oidc.api.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ export const oidcApi = createApi({
336336
return response as { data: object };
337337
},
338338
}),
339-
userInfo: builder.mutation<TokenExchangeResponse, { accessToken: string; endpoint: string }>({
339+
userInfo: builder.mutation<unknown, { accessToken: string; endpoint: string }>({
340340
queryFn: async ({ accessToken, endpoint }, api, _, baseQuery) => {
341341
const { requestMiddleware, logger } = api.extra as Extras;
342342

@@ -375,7 +375,7 @@ export const oidcApi = createApi({
375375

376376
logger.debug('OIDC userInfo API response', response);
377377

378-
return response as { data: TokenExchangeResponse };
378+
return response as { data: unknown };
379379
},
380380
}),
381381
}),

0 commit comments

Comments
 (0)