From 6d163a90671d8c1d8fb71bb924d5a7a5c8e6ae98 Mon Sep 17 00:00:00 2001 From: "makabe.t" Date: Thu, 9 Nov 2023 06:40:14 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20PR=20565:=20=E4=BB=A3=E8=A1=8C?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E4=B8=AD=E3=81=AF=E3=82=B5=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E3=82=92=E9=9D=9E=E6=B4=BB=E6=80=A7?= =?UTF-8?q?or=E9=9D=9E=E8=A1=A8=E7=A4=BA=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task3066: 代行操作中はサインアウトを非活性or非表示にする](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3066) - 代行操作中はサインアウトボタンが非活性となるように修正しました。 - ログアウト時に自ユーザー情報取得APIを呼ばないように修正しました。 - アクセストークンの削除後に呼ばれ、401エラーになるため ## レビューポイント - 代行操作中はサインアウトボタンのマウスイベントを無効にすることで非活性としていますが対応として適切でしょうか? - ログアウト時(アクセストークンがない場合)はヘッダで自ユーザー情報取得APIを呼ばないように修正しましたが、処理として適切でしょうか? - エラーになる呼び出しはしないようにしたい&使っているのはヘッダでのみなのでほかの箇所への影響はない認識です。 ## UIの変更 - [Task3066](https://ndstokyo.sharepoint.com/:f:/r/sites/Piranha/Shared%20Documents/General/OMDS/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88/Task3066?csf=1&web=1&e=3ztNOy) ## 動作確認状況 - ローカルで確認 --- .../src/components/auth/constants.ts | 2 +- .../src/components/header/loginedHeader.tsx | 23 ++++++++++++++----- .../src/features/login/operations.ts | 3 +-- 3 files changed, 19 insertions(+), 9 deletions(-) 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);