(null);
+ const { accounts, instance, inProgress } = useMsal();
+ const dispatch: AppDispatch = useDispatch();
+ const navigate = useNavigate();
- const request: SilentRequest = {
- scopes: ["openid"],
- account: accounts[0],
- };
- // TODO store側でこの処理を行うべきなので、Task1361で移植する
- instance.acquireTokenSilent(request).then((response) => {
- setIdToken(response.idToken);
- });
- return (
- <>
- {idToken}
-
-
- >
- );
+ const login = useCallback(async () => {
+ const request: SilentRequest = {
+ scopes: ["openid"],
+ account: accounts[0],
+ };
+ // ログイン処理呼び出し
+ const { meta } = await dispatch(loginAsync({ instance, request }));
+
+ // ログイン失敗した場合、B2Cをログアウトしてからエラーページに遷移する
+ if (meta.requestStatus === "rejected") {
+ instance.logout({
+ postLogoutRedirectUri: "/AuthError",
+ });
+ }
+ if (meta.requestStatus === "fulfilled") {
+ navigate("/XXX");
+ }
+ }, [accounts, dispatch, instance, navigate]);
+
+ useEffect(() => {
+ // B2CからリダイレクトされてB2Cへのログインが完了してからAPIを呼ぶ
+ if (inProgress === InteractionStatus.None) {
+ login();
+ }
+ }, [accounts, dispatch, inProgress, instance, login]);
+
+ return loading ...
;
};
export default LoginPage;
diff --git a/dictation_client/src/pages/SamplePage/index.tsx b/dictation_client/src/pages/SamplePage/index.tsx
index 754ba8e..f93f218 100644
--- a/dictation_client/src/pages/SamplePage/index.tsx
+++ b/dictation_client/src/pages/SamplePage/index.tsx
@@ -1,9 +1,19 @@
+import { useMsal } from "@azure/msal-react";
import React from "react";
-const SamplePage: React.FC = () => (
-
-
hello world!!
-
-);
+const SamplePage: React.FC = () => {
+ const { instance } = useMsal();
+ return (
+
+
hello world!!
+
+
+ );
+};
export default SamplePage;
diff --git a/dictation_client/src/pages/TopPage/index.tsx b/dictation_client/src/pages/TopPage/index.tsx
index d6440c0..40e0b80 100644
--- a/dictation_client/src/pages/TopPage/index.tsx
+++ b/dictation_client/src/pages/TopPage/index.tsx
@@ -1,6 +1,6 @@
-import React from "react";
import { useMsal } from "@azure/msal-react";
import { loginRequest } from "common/auth/msalConfig";
+import React from "react";
const TopPage: React.FC = () => {
const { instance } = useMsal();
diff --git a/dictation_client/src/react-app-env.d.ts b/dictation_client/src/react-app-env.d.ts
index 6431bc5..c981c95 100644
--- a/dictation_client/src/react-app-env.d.ts
+++ b/dictation_client/src/react-app-env.d.ts
@@ -1 +1,13 @@
+/* eslint-disable @typescript-eslint/naming-convention */
+// 環境変数のコード補完
///
+interface ImportMetaEnv {
+ readonly VITE_STAGE: string;
+ readonly VITE_B2C_CLIENTID: string;
+ readonly VITE_B2C_AUTHORITY: string;
+ readonly VITE_B2C_KNOWNAUTHORITIES: string;
+}
+
+interface ImportMeta {
+ readonly env: ImportMetaEnv;
+}
diff --git a/dictation_client/vite.config.ts b/dictation_client/vite.config.ts
index c132c49..3918d41 100644
--- a/dictation_client/vite.config.ts
+++ b/dictation_client/vite.config.ts
@@ -14,5 +14,5 @@ export default defineConfig({
sourcemap: true,
minify: false,
},
- plugins: [env({ prefix: "REACT_APP_" }), tsconfigPaths(), react()],
+ plugins: [env(), tsconfigPaths(), react()],
});