Skip to content

Commit 3c423d7

Browse files
committed
feat: refactor login component and update authentication flow; rename Overview to LoginPage and adjust navigation
1 parent 41feeb2 commit 3c423d7

File tree

3 files changed

+38
-30
lines changed

3 files changed

+38
-30
lines changed

dashboard/src/content/login/index.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Helmet } from 'react-helmet-async';
33

44
import { styled } from '@mui/material/styles';
55
import Logo from 'src/components/LogoSign';
6-
import Hero from './Login';
6+
import Login from './Login';
77

88
const OverviewWrapper = styled(Box)(
99
() => `
@@ -14,7 +14,7 @@ const OverviewWrapper = styled(Box)(
1414
`
1515
);
1616

17-
function Overview() {
17+
export const LoginPage = () => {
1818
return (
1919
<OverviewWrapper>
2020
<Helmet>
@@ -25,11 +25,9 @@ function Overview() {
2525
<Logo />
2626
</Box>
2727
<Card sx={{ p: 10, mb: 10, borderRadius: 12 }}>
28-
<Hero />
28+
<Login />
2929
</Card>
3030
</Container>
3131
</OverviewWrapper>
3232
);
33-
}
34-
35-
export default Overview;
33+
};

dashboard/src/contexts/AuthContext.tsx

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,13 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
126126
}, [refreshTokenMutation]);
127127

128128
const login = useCallback(
129-
(accessToken: string, refreshToken: string) => {
129+
async (accessToken: string, refreshToken: string) => {
130130
localStorage.setItem('accessToken', accessToken);
131131
localStorage.setItem('refreshToken', refreshToken);
132132
setToken(accessToken);
133133
setIsAuthorized(true);
134-
fetchUserInfo();
135-
navigate('/dashboards/crypto');
134+
await fetchUserInfo();
135+
navigate('/dashboard/overview');
136136
},
137137
[fetchUserInfo, navigate]
138138
);
@@ -150,35 +150,44 @@ export function AuthProvider({ children }: { children: React.ReactNode }) {
150150
async function initAuth() {
151151
setIsLoading(true);
152152

153-
const storedToken = localStorage.getItem('accessToken');
154-
if (!storedToken) {
155-
setIsAuthorized(false);
156-
setUser(null);
157-
setIsLoading(false);
158-
navigate('/');
159-
return;
160-
}
153+
try {
154+
const storedToken = localStorage.getItem('accessToken');
155+
if (!storedToken) {
156+
setIsAuthorized(false);
157+
setUser(null);
158+
setIsLoading(false);
159+
return;
160+
}
161161

162-
let isValid = await validateToken();
162+
let isValid = await validateToken();
163163

164-
if (!isValid) {
165-
isValid = await refreshAccessToken();
166-
}
164+
if (!isValid) {
165+
isValid = await refreshAccessToken();
166+
}
167167

168-
if (isValid) {
169-
setIsAuthorized(true);
170-
await fetchUserInfo();
171-
} else {
168+
if (isValid) {
169+
const userFetched = await fetchUserInfo();
170+
if (userFetched) {
171+
setIsAuthorized(true);
172+
} else {
173+
throw new Error('Failed to fetch user info');
174+
}
175+
} else {
176+
throw new Error('Invalid token');
177+
}
178+
} catch (error) {
179+
console.error('Auth initialization error:', error);
172180
setIsAuthorized(false);
173181
setUser(null);
174-
navigate('/');
182+
localStorage.removeItem('accessToken');
183+
localStorage.removeItem('refreshToken');
184+
} finally {
185+
setIsLoading(false);
175186
}
176-
177-
setIsLoading(false);
178187
}
179188

180189
initAuth();
181-
}, [validateToken, refreshAccessToken, fetchUserInfo, navigate]);
190+
}, [validateToken, refreshAccessToken, fetchUserInfo]);
182191

183192
if (isLoading) {
184193
return <div>Loading...</div>;

dashboard/src/router.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import BaseLayout from './layouts/BaseLayout';
77

88
import SuspenseLoader from './components/SuspenseLoader';
99
import Login from './content/login/Login';
10+
import { LoginPage } from './content/login';
1011

1112
const Loader = (Component) => (props) =>
1213
(
@@ -83,7 +84,7 @@ const routes: RouteObject[] = [
8384
children: [
8485
{
8586
path: '/',
86-
element: <Login />
87+
element: <LoginPage />
8788
},
8889
{
8990
path: '*',

0 commit comments

Comments
 (0)