Skip to content

Commit 85fb7fe

Browse files
committed
update readme
1 parent 33ae48d commit 85fb7fe

File tree

1 file changed

+75
-57
lines changed
  • 06-rest-api/02-auth/05-login-app-headers

1 file changed

+75
-57
lines changed

06-rest-api/02-auth/05-login-app-headers/README.md

Lines changed: 75 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,81 @@ export const logout = async (): Promise<boolean> => {
151151

152152
## Redirect to login page
153153

154-
Now, we will implement a redirect to login page on `401` Not Authorize responses:
154+
Create `AuthRoute`:
155+
156+
_./front/src/core/router/router.component.tsx_
157+
158+
```diff
159+
import React from 'react';
160+
import {
161+
HashRouter,
162+
Routes,
163+
Route,
164+
Navigate,
165+
+ Outlet,
166+
} from 'react-router-dom';
167+
import { useApiConfig } from '#core/api';
168+
+ import { AuthContext } from '#core/auth';
169+
import { LoginScene, ListScene } from '#scenes';
170+
- import { switchRoutes } from './routes';
171+
+ import { switchRoutes, linkRoutes } from './routes';
172+
173+
export const RouterComponent: React.FC = () => {
174+
return (
175+
<HashRouter>
176+
<AppRoutes />
177+
</HashRouter>
178+
);
179+
};
180+
181+
+ const PrivateRoutes = () => {
182+
+ const { userSession } = React.useContext(AuthContext);
183+
+ return userSession?.userName ? (
184+
+ <Outlet />
185+
+ ) : (
186+
+ <Navigate to={linkRoutes.login} />
187+
+ );
188+
+ };
189+
190+
const AppRoutes: React.FC = () => {
191+
useApiConfig();
192+
return (
193+
<Routes>
194+
<Route path={switchRoutes.login} element={<LoginScene />} />
195+
+ <Route element={<PrivateRoutes />}>
196+
+ <Route path={switchRoutes.list} element={<ListScene />} />
197+
+ </Route>
198+
<Route
199+
path={switchRoutes.root}
200+
element={<Navigate to={switchRoutes.login} />}
201+
/>
202+
</Routes>
203+
);
204+
};
205+
206+
```
207+
208+
> Try to navigate to /list without login.
209+
210+
Now, let's take the next scenario:
211+
212+
1. User logs in.
213+
2. Make some requests and use the app.
214+
3. User goes to sleep and the token expires, but the app is still open.
215+
4. User wakes up and tries to make a request.
216+
5. We will recieve a `401` response. But the app doesn't redirect to login page.
217+
218+
> Add comments to the `PrivateRoutes` code to explain the scenario.
219+
220+
_./front/src/core/router/router.component.tsx_
221+
222+
```jsx
223+
// <Route element={<PrivateRoutes />}>
224+
<Route path={switchRoutes.list} element={<ListScene />} />
225+
// </Route>
226+
```
227+
228+
Let's do it:
155229

156230
_./front/src/core/api/api.hooks.ts_
157231

@@ -222,62 +296,6 @@ const AppRoutes: React.FC = () => {
222296

223297
> Try to fetch clients or orders without login.
224298
225-
Create `AuthRoute`:
226-
227-
_./front/src/core/router/router.component.tsx_
228-
229-
```diff
230-
import React from 'react';
231-
import {
232-
HashRouter,
233-
Routes,
234-
Route,
235-
Navigate,
236-
+ Outlet,
237-
} from 'react-router-dom';
238-
import { useApiConfig } from '#core/api';
239-
+ import { AuthContext } from '#core/auth';
240-
import { LoginScene, ListScene } from '#scenes';
241-
- import { switchRoutes } from './routes';
242-
+ import { switchRoutes, linkRoutes } from './routes';
243-
244-
export const RouterComponent: React.FC = () => {
245-
return (
246-
<HashRouter>
247-
<AppRoutes />
248-
</HashRouter>
249-
);
250-
};
251-
252-
+ const PrivateRoutes = () => {
253-
+ const { userSession } = React.useContext(AuthContext);
254-
+ return userSession?.userName ? (
255-
+ <Outlet />
256-
+ ) : (
257-
+ <Navigate to={linkRoutes.login} />
258-
+ );
259-
+ };
260-
261-
const AppRoutes: React.FC = () => {
262-
useApiConfig();
263-
return (
264-
<Routes>
265-
<Route path={switchRoutes.login} element={<LoginScene />} />
266-
+ <Route element={<PrivateRoutes />}>
267-
+ <Route path={switchRoutes.list} element={<ListScene />} />
268-
+ </Route>
269-
<Route
270-
path={switchRoutes.root}
271-
element={<Navigate to={switchRoutes.login} />}
272-
/>
273-
</Routes>
274-
);
275-
};
276-
277-
```
278-
279-
> Try to navigate to /list without login.
280-
281299
# Using CORS
282300

283301
Let's update example to check if it's working with cors:

0 commit comments

Comments
 (0)