diff --git a/dictation_client/src/components/auth/constants.ts b/dictation_client/src/components/auth/constants.ts index 34f51b0..cf2b972 100644 --- a/dictation_client/src/components/auth/constants.ts +++ b/dictation_client/src/components/auth/constants.ts @@ -36,7 +36,7 @@ export const TIERS = { export const UNAUTHORIZED_TO_CONTINUE_ERROR_CODES = [ "E010209", "E010503", - "E10501", + "E010501", ]; /** diff --git a/dictation_client/src/components/header/loginedHeader.tsx b/dictation_client/src/components/header/loginedHeader.tsx index 9f16a9d..86f5e68 100644 --- a/dictation_client/src/components/header/loginedHeader.tsx +++ b/dictation_client/src/components/header/loginedHeader.tsx @@ -3,7 +3,7 @@ import styles from "styles/app.module.scss"; import { useDispatch, useSelector } from "react-redux"; import { AppDispatch } from "app/store"; import { useMsal } from "@azure/msal-react"; -import { clearToken } from "features/auth"; +import { clearToken, loadAccessToken } from "features/auth"; import { useTranslation } from "react-i18next"; import { getUserInfoAsync, @@ -35,6 +35,7 @@ const LoginedHeader: React.FC = (props: HeaderProps) => { // メニューの代行操作表示制御 const isDelegation = useSelector(selectDelegationAccessToken) !== null; + const accessToken = loadAccessToken(); const filterMenus = getFilteredMenus(isDelegation); // Headerのユーザー情報を取得する @@ -42,20 +43,26 @@ const LoginedHeader: React.FC = (props: HeaderProps) => { const userName = useSelector(selectUserName); useEffect(() => { - if (isUserNameEmpty) { + // ユーザー情報が空の場合、ユーザー情報を取得する(アクセストークンがある場合のみ) + // ログアウト時にユーザー情報とアクセストークンをクリアするため、失敗するそのタイミングでユーザー情報を取得しないようにする + if (accessToken !== null && isUserNameEmpty) { dispatch(getUserInfoAsync()); } + // eslint-disable-next-line react-hooks/exhaustive-deps }, [dispatch, isUserNameEmpty]); // ログアウト const onSignoutButton = useCallback( async () => { // ダイアログ確認 - // eslint-disable-next-line no-alert - if (window.confirm(t(getTranslationID("common.message.displayDialog")))) { - instance.logoutRedirect({ postLogoutRedirectUri: "/" }); + if ( + !isDelegation && + // eslint-disable-next-line no-alert + window.confirm(t(getTranslationID("common.message.displayDialog"))) + ) { dispatch(clearToken()); dispatch(clearUserInfo()); + instance.logoutRedirect({ postLogoutRedirectUri: "/" }); } }, // eslint-disable-next-line react-hooks/exhaustive-deps @@ -91,7 +98,11 @@ const LoginedHeader: React.FC = (props: HeaderProps) => { {userName} {/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions */} - + {t(getTranslationID("common.label.signOutButton"))} diff --git a/dictation_client/src/features/login/operations.ts b/dictation_client/src/features/login/operations.ts index 07185ba..ffbf4e9 100644 --- a/dictation_client/src/features/login/operations.ts +++ b/dictation_client/src/features/login/operations.ts @@ -66,8 +66,7 @@ export const getUserInfoAsync = createAsyncThunk< // apiのConfigurationを取得する const { getState } = thunkApi; const state = getState() as RootState; - const { configuration } = state.auth; - const accessToken = getAccessToken(state.auth); + const { configuration, accessToken } = state.auth; const config = new Configuration(configuration); const usersApi = new UsersApi(config);