Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Is there any status to know if a user is logging out? #1456

Closed
mikibakaiki opened this issue Sep 25, 2024 · 5 comments
Closed

Is there any status to know if a user is logging out? #1456

mikibakaiki opened this issue Sep 25, 2024 · 5 comments

Comments

@mikibakaiki
Copy link

mikibakaiki commented Sep 25, 2024

Not an issue, more like asking for help :)

Is there any way to know if a user is logging out? I needed this kind of behavior, and i think this was possible using the react-oidc-context package. However, reading through the documentation and testing with a react demo, i couldn't find any status for this specific purposes.

From what i gather, there's only the OidcUserStatus enum.

Any hints? :)

EDIT: Meanwhile, found this, and it might be what i want, but how can i use it through oidc-react ?

@guillaume-chervet
Copy link
Contributor

@mikibakaiki
Copy link
Author

Hey @guillaume-chervet , thanks for quickly getting back to me :)

I'm still not sure. Going through a big code base, and don't know all the logic behind it 😅

The isAuthenticated is just a boolean, right?

How could i use the Status enum i mentioned?

Also, on the same project, it doesn't make sense to use both oidc-client and oidc-react, right?

@guillaume-chervet
Copy link
Contributor

hi @mikibakaiki ,

yes isAuthenticated is just a boolean.

Status is an internal property for internal behavior.

You can listen events for this event :
image

the way to listen events =>

const onEvent = (configurationName, eventName, data) => {

@mikibakaiki
Copy link
Author

Thanks for answering, and sorry for taking too long to answer :) i got side tracked on this task.

Looking back at it, i think that the isAuthenticated might be a solution.

I have two questions, maybe a little of topic (one of them!):

  1. How would you listen for the concrete logout event, as you mention? I feel like there's a concrete event i should be listening to.

  2. I'm wondering if there's a type for the configuration object. I know in previous versions there was, because im updating a codebase that relied on the former [email protected] 😅 Now, in the the readme, i only see:

export const configuration = {
  client_id: 'interactive.public.short',
  redirect_uri: window.location.origin + '/#/authentication/callback',
  silent_redirect_uri: window.location.origin + '/#/authentication/silent-callback',
  scope: 'openid profile email api offline_access',
  authority: 'https://demo.duendesoftware.com',
  service_worker_relative_url: '/OidcServiceWorker.js', // just comment that line to disable service worker mode
  service_worker_only: false,
  demonstrating_proof_of_possession: false,
};

with no type association.

Trying to look into this, so i don't change much of the codebase's logic, and can comply with good software practices :)

This is the older code version, and what i was looking for:

// oidc-client/index.d.ts

export interface OidcClientSettings {
  /** The URL of the OIDC/OAuth2 provider */
  authority?: string;
  readonly metadataUrl?: string;
  /** Provide metadata when authority server does not allow CORS on the metadata endpoint */
  metadata?: Partial<OidcMetadata>;
  /** Provide signingKeys when authority server does not allow CORS on the jwks uri */
  signingKeys?: any[];
  /** Your client application's identifier as registered with the OIDC/OAuth2 */
  client_id?: string;
  client_secret?: string;
  /** The type of response desired from the OIDC/OAuth2 provider (default: 'id_token') */
  readonly response_type?: string;
  readonly response_mode?: string;
  /** The scope being requested from the OIDC/OAuth2 provider (default: 'openid') */
  readonly scope?: string;
  /** The redirect URI of your client application to receive a response from the OIDC/OAuth2 provider */
  readonly redirect_uri?: string;
  /** The OIDC/OAuth2 post-logout redirect URI */
  readonly post_logout_redirect_uri?: string;
  /** The OIDC/OAuth2 post-logout redirect URI when using popup */
  readonly popup_post_logout_redirect_uri?: string;
  readonly prompt?: string;
  readonly display?: string;
  readonly max_age?: number;
  readonly ui_locales?: string;
  readonly acr_values?: string;
  /** Should OIDC protocol claims be removed from profile (default: true) */
  readonly filterProtocolClaims?: boolean;
  /** Flag to control if additional identity data is loaded from the user info endpoint in order to populate the user's profile (default: true) */
  readonly loadUserInfo?: boolean;
  /** Number (in seconds) indicating the age of state entries in storage for authorize requests that are considered abandoned and thus can be cleaned up (default: 300) */
  readonly staleStateAge?: number;
  /** The window of time (in seconds) to allow the current time to deviate when validating id_token's iat, nbf, and exp values (default: 300) */
  readonly clockSkew?: number;
  readonly clockService?: ClockService;
  readonly stateStore?: StateStore;
  readonly userInfoJwtIssuer?: 'ANY' | 'OP' | string;
  readonly mergeClaims?: boolean;
  ResponseValidatorCtor?: ResponseValidatorCtor;
  MetadataServiceCtor?: MetadataServiceCtor;
  /** An object containing additional query string parameters to be including in the authorization request */
  extraQueryParams?: Record<string, any>;
}


export interface UserManagerSettings extends OidcClientSettings {
  /** The URL for the page containing the call to signinPopupCallback to handle the callback from the OIDC/OAuth2 */
  readonly popup_redirect_uri?: string;
  /** The features parameter to window.open for the popup signin window.
   *  default: 'location=no,toolbar=no,width=500,height=500,left=100,top=100'
   */
  readonly popupWindowFeatures?: string;
  /** The target parameter to window.open for the popup signin window (default: '_blank') */
  readonly popupWindowTarget?: any;
  /** The URL for the page containing the code handling the silent renew */
  readonly silent_redirect_uri?: any;
  /** Number of milliseconds to wait for the silent renew to return before assuming it has failed or timed out (default: 10000) */
  readonly silentRequestTimeout?: any;
  /** Flag to indicate if there should be an automatic attempt to renew the access token prior to its expiration (default: false) */
  readonly automaticSilentRenew?: boolean;
  readonly validateSubOnSilentRenew?: boolean;
  /** Flag to control if id_token is included as id_token_hint in silent renew calls (default: true) */
  readonly includeIdTokenInSilentRenew?: boolean;
  /** Will raise events for when user has performed a signout at the OP (default: true) */
  readonly monitorSession?: boolean;
  /** Interval, in ms, to check the user's session (default: 2000) */
  readonly checkSessionInterval?: number;
  readonly query_status_response_type?: string;
  readonly stopCheckSessionOnError?: boolean;
  /** Will invoke the revocation endpoint on signout if there is an access token for the user (default: false) */
  readonly revokeAccessTokenOnSignout?: boolean;
  /** The number of seconds before an access token is to expire to raise the accessTokenExpiring event (default: 60) */
  readonly accessTokenExpiringNotificationTime?: number;
  readonly redirectNavigator?: any;
  readonly popupNavigator?: any;
  readonly iframeNavigator?: any;
  /** Storage object used to persist User for currently authenticated user (default: session storage) */
  readonly userStore?: WebStorageStateStore;
}

I'm sure most of these things are deprecated. So if there's no specific type in the library, could you tell me the exact properties i would / might need, so i can create an interface :)

Thanks and sorry if it got out of topic, or too long and confused 😅

Have a great weekend!

@jmc-debug
Copy link

jmc-debug commented Nov 4, 2024

I think i managed to have everything working like i wanted :) thanks for the help and support, you can close the ticket!

Keep up the good work @guillaume-chervet 👏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants