Let’s Take It Quick!
After you start your project, make sure to install all dependencies:
This way, you already have all the dependencies to create authentication for your project!
Login Component
The second step is creating your login component, so you can input the login information.
You need to import useState to manage form input state and useHistory to redirect users after successful login.
import axios from ‘axios‘;
import { useHistory } from ‘react-router-dom‘;
const Login = () => {
const [email, setEmail] = useState(”);
const [password, setPassword] = useState(”);
const history = useHistory();
const handleSubmit = async (e) => {
e.preventDefault();
try {
const response = await axios.post(‘/api/login‘, { email, password });
if (response.data.success) {
localStorage.setItem(‘token‘, response.data.token);
history.push(‘/dashboard‘);
} else {
alert(‘Invalid credentials‘);
}
} catch (error) {
console.error(‘Login error:‘, error);
}
};
return (
<form onSubmit={handleSubmit}>
<h2>Login</h2>
<input
type=“email“
placeholder=“Email“
value={email}
onChange={(e) => setEmail(e.target.value)}
required
/>
<input
type=“password“
placeholder=“Password“
value={password}
onChange={(e) => setPassword(e.target.value)}
required
/>
<button type=“submit“>Login</button>
</form>
);
};
export default Login;
Setting Your Routes
In src/App.js, set up the routes. Import BrowserRouter, Route, and Switch from react-router-dom to define the routes. This sets up two routes: one for the login page and one for the dashboard.
import { BrowserRouter as Router, Route, Switch } from ‘react-router-dom‘;
import Login from ‘./Login‘;
import Dashboard from ‘./Dashboard‘;
function App() {
return (
<Router>
<Switch>
<Route path=“/“ exact component={Login} />
<Route path=“/dashboard“ component={Dashboard} />
</Switch>
</Router>
);
}
export default App;
Creating Private Routes
Create the PrivateRoute.js component to protect your routes. This component will check if the user is authenticated before granting access.
import { Route, Redirect } from ‘react-router-dom‘;
const PrivateRoute = ({ component: Component, …rest }) => {
const isAuthenticated = !!localStorage.getItem(‘token‘);
return (
<Route
{…rest}
render={(props) =>
isAuthenticated ? <Component {…props} /> : <Redirect to=”/“ />
}
/>
);
};
export default PrivateRoute;
Update your routing in App.js to use the PrivateRoute for the dashboard.
Backend API
This code will be validating a user’s email and password and returning a JSON Web Token (JWT).
const jwt = require(‘jsonwebtoken‘);
const bodyParser = require(‘body-parser‘);
const app = express();
app.use(bodyParser.json());
app.post(‘/api/login‘, (req, res) => {
const { email, password } = req.body;
if (email === ‘test@example.com‘ && password === ‘password123‘) {
const token = jwt.sign({ email }, ‘your_jwt_secret‘, { expiresIn: ‘1h‘ });
return res.json({ success: true, token });
}
res.json({ success: false, message: ‘Invalid credentials‘ });
});
app.listen(5000, () => {
console.log(‘Server is running on port 5000‘);
});
Tips
After a successful login, store the JWT token in localStorage. To keep it secure:
Do not store sensitive information in the token.
Use HTTPS to encrypt data in transit.
Implement token expiration and refresh mechanisms.
Thank you.
Please Follow: Frontend Ai