bento-auth-js
Version:
Authentication library for web applications of Bento-Platform
34 lines • 1.58 kB
JavaScript
import { useCallback } from "react";
import { useDispatch } from "react-redux";
import { useBentoAuthContext } from "./contexts";
import { useAuthState, useOpenIdConfig } from "./hooks";
import { setLSNotSignedIn } from "./performAuth";
import { signOut } from "./redux/authSlice";
import { logMissingAuthContext } from "./utils";
export const usePerformSignOut = () => {
const dispatch = useDispatch();
const { clientId, postSignOutUrl } = useBentoAuthContext();
const { idToken } = useAuthState();
const { data: openIdConfig } = useOpenIdConfig();
const endSessionEndpoint = openIdConfig === null || openIdConfig === void 0 ? void 0 : openIdConfig.end_session_endpoint;
return useCallback(() => {
if (!clientId || !postSignOutUrl) {
logMissingAuthContext("clientId", "postSignOutUrl");
return;
}
if (!endSessionEndpoint) {
dispatch(signOut());
return;
}
// Sign-out supported, so do that.
const endSessionUrl = new URL(endSessionEndpoint);
if (idToken) {
endSessionUrl.searchParams.append("id_token_hint", idToken);
}
endSessionUrl.searchParams.append("client_id", clientId);
endSessionUrl.searchParams.append("post_logout_redirect_uri", postSignOutUrl);
setLSNotSignedIn(); // Make sure we don't immediately try to sign in again
window.location.href = endSessionUrl.toString();
}, [dispatch, clientId, postSignOutUrl, idToken, endSessionEndpoint]);
};
//# sourceMappingURL=performSignOut.js.map