diff --git a/dictation_client/src/App.tsx b/dictation_client/src/App.tsx index 9f35aca..1d47893 100644 --- a/dictation_client/src/App.tsx +++ b/dictation_client/src/App.tsx @@ -1,8 +1,6 @@ import AppRouter from "AppRouter"; import { BrowserRouter } from "react-router-dom"; -import { PublicClientApplication } from "@azure/msal-browser"; -import { MsalProvider, useMsal } from "@azure/msal-react"; -import { msalConfig } from "common/msalConfig"; +import { useMsal } from "@azure/msal-react"; import { useEffect, useLayoutEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; import globalAxios, { AxiosError, AxiosResponse } from "axios"; @@ -19,7 +17,6 @@ const App = (): JSX.Element => { const { instance } = useMsal(); // eslint-disable-next-line @typescript-eslint/no-unused-vars const [t, i18n] = useTranslation(); - const pca = new PublicClientApplication(msalConfig); useEffect(() => { const id = globalAxios.interceptors.response.use( (response: AxiosResponse) => response, @@ -70,11 +67,9 @@ const App = (): JSX.Element => { dispatch(closeSnackbar()); }} /> - - - - - + + + ); }; diff --git a/dictation_client/src/common/token.ts b/dictation_client/src/common/token.ts index ac7c3e9..88e42d3 100644 --- a/dictation_client/src/common/token.ts +++ b/dictation_client/src/common/token.ts @@ -76,3 +76,16 @@ export const getIdTokenFromLocalStorage = ( } return null; }; + +// JWTが有効期限切れかどうかを判定する +export const isTokenExpired = (token: string | null): boolean => { + if (token == null) { + return true; + } + const tokenObject = JSON.parse(atob(token.split(".")[1])); + if (isToken(tokenObject)) { + const now = Math.floor(Date.now() / 1000); + return tokenObject.exp < now; + } + return true; +}; diff --git a/dictation_client/src/main.tsx b/dictation_client/src/main.tsx index 1aac073..924f95b 100644 --- a/dictation_client/src/main.tsx +++ b/dictation_client/src/main.tsx @@ -3,18 +3,25 @@ import React from "react"; import { createRoot } from "react-dom/client"; import { I18nextProvider } from "react-i18next"; import { Provider } from "react-redux"; +import { PublicClientApplication } from "@azure/msal-browser"; +import { msalConfig } from "common/msalConfig"; +import { MsalProvider } from "@azure/msal-react"; import App from "./App"; import * as serviceWorker from "./serviceWorker"; import i18n from "./i18n"; +const pca = new PublicClientApplication(msalConfig); + const container = document.getElementById("root"); if (container) { const root = createRoot(container); root.render( - - + + + + ); diff --git a/dictation_client/src/pages/AuthPage/index.tsx b/dictation_client/src/pages/AuthPage/index.tsx index e8d81f9..c891d0f 100644 --- a/dictation_client/src/pages/AuthPage/index.tsx +++ b/dictation_client/src/pages/AuthPage/index.tsx @@ -10,14 +10,6 @@ import { import React, { useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; import { useNavigate } from "react-router-dom"; -import { - clearToken, - isAdminUser, - isApproveTier, - isStandardUser, - loadAccessToken, -} from "features/auth"; -import { TIERS } from "components/auth/constants"; const AuthPage: React.FC = (): JSX.Element => { const { instance } = useMsal(); @@ -34,38 +26,7 @@ const AuthPage: React.FC = (): JSX.Element => { (async () => { try { - // ログイン済みの場合、ログイン後の遷移先を決定する - if (loadAccessToken()) { - // 第一~第四階層の管理者はライセンス画面へ遷移 - if ( - isApproveTier([ - TIERS.TIER1, - TIERS.TIER2, - TIERS.TIER3, - TIERS.TIER4, - ]) && - isAdminUser() - ) { - navigate("/license"); - return; - } - // 第五階層の管理者はユーザー画面へ遷移 - if (isApproveTier([TIERS.TIER5]) && isAdminUser()) { - navigate("/user"); - return; - } - // 一般ユーザーはdictationPageへ遷移 - if (isStandardUser()) { - navigate("/dictations"); - return; - } - // それ以外は認証エラー画面へ遷移 - instance.logoutRedirect({ - postLogoutRedirectUri: "/AuthError", - }); - clearToken(); - return; - } + // idTokenが有効セットされているかを確認する const loginResult = await instance.handleRedirectPromise(); if (loginResult && loginResult.account) { const { homeAccountId, idTokenClaims } = loginResult.account; diff --git a/dictation_client/src/pages/DictationPage/displayInfo.tsx b/dictation_client/src/pages/DictationPage/displayInfo.tsx index 74224b9..6a688e4 100644 --- a/dictation_client/src/pages/DictationPage/displayInfo.tsx +++ b/dictation_client/src/pages/DictationPage/displayInfo.tsx @@ -353,6 +353,7 @@ export const DisPlayInfo: React.FC = (): JSX.Element => {