diff --git a/src/app/services/auth.js b/src/app/services/auth.js
index 09984452..a4b1ad01 100644
--- a/src/app/services/auth.js
+++ b/src/app/services/auth.js
@@ -1,7 +1,12 @@
import { createApi } from "@reduxjs/toolkit/query/react";
import { nanoid } from "@reduxjs/toolkit";
import baseQuery from "./base.query";
-import { setAuthData, updateToken, resetAuthData } from "../slices/auth.data";
+import {
+ setAuthData,
+ updateToken,
+ resetAuthData,
+ updateInitilize,
+} from "../slices/auth.data";
import BASE_URL, { KEY_DEVICE_KEY } from "../config";
const getDeviceId = () => {
let d = localStorage.getItem(KEY_DEVICE_KEY);
@@ -129,10 +134,24 @@ export const authApi = createApi({
}
},
}),
+ getInitialized: builder.query({
+ query: () => ({
+ url: `/admin/system/initialized`,
+ }),
+ async onQueryStarted(params, { dispatch, queryFulfilled }) {
+ try {
+ const { data: isInitized } = await queryFulfilled;
+ dispatch(updateInitilize(isInitized));
+ } catch {
+ console.log("api initialized error");
+ }
+ },
+ }),
}),
});
export const {
+ useGetInitializedQuery,
useSendMagicLinkMutation,
useGetCredentialsQuery,
useUpdateDeviceTokenMutation,
diff --git a/src/app/slices/auth.data.js b/src/app/slices/auth.data.js
index 7b23473e..9de9da1f 100644
--- a/src/app/slices/auth.data.js
+++ b/src/app/slices/auth.data.js
@@ -7,12 +7,14 @@ import {
KEY_EXPIRE,
} from "../config";
const initialState = {
+ initialized: true,
uid: null,
token: localStorage.getItem(KEY_TOKEN),
expireTime: localStorage.getItem(KEY_EXPIRE) || new Date().getTime(),
refreshToken: localStorage.getItem(KEY_REFRESH_TOKEN),
};
const emptyState = {
+ initialized: true,
uid: null,
token: null,
expireTime: new Date().getTime(),
@@ -24,11 +26,13 @@ const authDataSlice = createSlice({
reducers: {
setAuthData(state, action) {
const {
+ initialized = true,
user: { uid },
token,
refresh_token,
expired_in = 0,
} = action.payload;
+ state.initialized = initialized;
state.uid = uid;
state.token = token;
state.refreshToken = refresh_token;
@@ -58,6 +62,10 @@ const authDataSlice = createSlice({
state.uid = uid;
console.log("set uid orginal");
},
+ updateInitilize(state, action) {
+ const isInitized = action.payload;
+ state.initialized = isInitized;
+ },
updateToken(state, action) {
const { token, refresh_token, expired_in } = action.payload;
console.log("refresh token");
@@ -72,6 +80,7 @@ const authDataSlice = createSlice({
},
});
export const {
+ updateInitilize,
setAuthData,
resetAuthData,
setUid,
diff --git a/src/common/component/RequireAuth.js b/src/common/component/RequireAuth.js
index e713a298..fe2cf079 100644
--- a/src/common/component/RequireAuth.js
+++ b/src/common/component/RequireAuth.js
@@ -1,9 +1,13 @@
// import React from 'react'
-import { Navigate } from 'react-router-dom';
+import { Navigate } from "react-router-dom";
+import { useSelector } from "react-redux";
+import { useGetInitializedQuery } from "../../app/services/auth";
-import { useSelector } from 'react-redux';
-
-export default function RequireAuth({ children, redirectTo = '/login' }) {
- const { token } = useSelector((store) => store.authData);
- return token ? children : ;
+export default function RequireAuth({ children, redirectTo = "/login" }) {
+ const { isLoading } = useGetInitializedQuery();
+ const { token, initialized } = useSelector((store) => store.authData);
+ if (isLoading) return null;
+ // 未初始化 则先走setup 流程
+ if (!initialized) return ;
+ return token ? children : ;
}