Skip to content

Commit

Permalink
[FEAT]: created auth provider and private router
Browse files Browse the repository at this point in the history
  • Loading branch information
Ananyamadhu08 committed Jul 30, 2022
1 parent 9caeae4 commit 769fb81
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 4 deletions.
32 changes: 32 additions & 0 deletions src/context/providers/AuthProvider.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import React, { useEffect } from "react";
import { createContext, useContext, useState } from "react";

const AuthContext = createContext();

export const AuthProvider = ({ children }) => {
const [userDB, setUserDB] = useState(
JSON.parse(localStorage.getItem("usersInfo")) || []
);

const [authenticated, setAuthenticated] = useState(
JSON.parse(localStorage.getItem("authenticated")) || false
);

useEffect(() => {
localStorage.setItem("usersInfo", JSON.stringify(userDB));
}, [userDB]);

useEffect(() => {
localStorage.setItem("authenticated", JSON.stringify(authenticated));
}, [authenticated]);

return (
<AuthContext.Provider
value={{ userDB, setUserDB, authenticated, setAuthenticated }}
>
{children}
</AuthContext.Provider>
);
};

export const useAuth = () => useContext(AuthContext);
17 changes: 17 additions & 0 deletions src/routes/PrivateRouter.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import { Navigate, useLocation } from "react-router-dom";

import React from "react";

const PrivateRouter = ({ children }) => {
const authenticated = localStorage.getItem("authenticated");

let location = useLocation();

return authenticated ? (
children
) : (
<Navigate to="/" state={{ from: location }} replace />
);
};

export default PrivateRouter;
27 changes: 23 additions & 4 deletions src/routes/WebsiteRoutes.jsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,32 @@
import React from "react";
import { Routes, Route } from "react-router-dom";
import { Home, TaskDetails, Tasks } from "../pages";
import { useAuth } from "../context";
import { Home, Login, Signup, TaskDetails, Tasks } from "../pages";
import PrivateRouter from "./PrivateRouter";

const WebsiteRoutes = () => {
const { authenticated } = useAuth();

return (
<Routes>
<Route path="/" element={<Home />} />
<Route path="/tasks" element={<Tasks />} />
<Route path="/tasks/:taskId" element={<TaskDetails />} />
<Route path="/signup" element={<Signup />} />
<Route path="/" element={authenticated ? <Home /> : <Login />} />
<Route
path="/tasks"
element={
<PrivateRouter>
<Tasks />
</PrivateRouter>
}
/>
<Route
path="/tasks/:taskId"
element={
<PrivateRouter>
<TaskDetails />
</PrivateRouter>
}
/>
</Routes>
);
};
Expand Down

0 comments on commit 769fb81

Please sign in to comment.