To integrate authentication with React Router, follow these precise steps:
1. Install Dependencies
Ensure you have React Router installed:
npm install react-router-dom
2. Create Authentication Context (auth.js)
Manage authentication state using React Context:
import { createContext, useContext, useState } from "react";
const AuthContext = createContext();
export const AuthProvider = ({ children }) => {
const [user, setUser] = useState(null);
const login = (userData) => setUser(userData);
const logout = () => setUser(null);
return (
<AuthContext.Provider value={{ user, login, logout }}>
{children}
</AuthContext.Provider>
);
};
export const useAuth = () => useContext(AuthContext);
3. Create Protected Route Component
Restrict access to authenticated users:
import { Navigate } from "react-router-dom";
import { useAuth } from "./auth";
const ProtectedRoute = ({ children }) => {
const { user } = useAuth();
return user ? children : <Navigate to="/login" />;
};
export default ProtectedRoute;
4. Define Routes in App.js
Use React Router with authentication logic:
import { BrowserRouter as Router, Routes, Route } from "react-router-dom";
import { AuthProvider } from "./auth";
import ProtectedRoute from "./ProtectedRoute";
import Home from "./Home";
import Login from "./Login";
import Dashboard from "./Dashboard";
const App = () => (
<AuthProvider>
<Router>
<Routes>
<Route path="/" element={<Home />} />
<Route path="/login" element={<Login />} />
<Route
path="/dashboard"
element={<ProtectedRoute><Dashboard /></ProtectedRoute>}
/>
</Routes>
</Router>
</AuthProvider>
);
export default App;
5. Handle Login and Logout (Login.js)
Simulate login authentication:
import { useAuth } from "./auth";
import { useNavigate } from "react-router-dom";
const Login = () => {
const { login } = useAuth();
const navigate = useNavigate();
const handleLogin = () => {
login({ name: "User" });
navigate("/dashboard");
};
return <button onClick={handleLogin}>Login</button>;
};
export default Login;