Welcome, we will look into the secure implementation of login functionality in our MERN app! Follow along as we connect React Login Page with Node.js and MongoDB, ensuring a seamless and protected login experience & also to store the data in our MongoDB Database.
Here is the Complete Login Page source code. But first I want you to try yourself and then only copy the code ok.
import { useState } from "react";
import { useNavigate } from "react-router-dom";
import { useAuth } from "../store/auth";
export const Login = () => {
const [user, setUser] = useState({
username: "",
password: "",
});
const { saveTokenInLocalStr } = useAuth();
const navigate = useNavigate();
// let handle the input field value
const handleInput = (e) => {
let name = e.target.name;
let value = e.target.value;
setUser({
...user,
[name]: value,
});
};
// let handle the form submission
const handleSubmit = async (e) => {
e.preventDefault();
try {
const response = await fetch("http://localhost:5000/api/auth/login", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(user),
});
if (response.ok) {
const responseData = await response.json();
console.log("after login: ", responseData);
// toast.success("Registration Successful");
saveTokenInLocalStr(responseData.token);
navigate("/");
}
} catch (error) {
console.log(error);
}
};
return (
<>
<section>
<main>
<div className="section-registration">
<div className="container grid grid-two-cols">
<div className="registration-image reg-img">
<img
src="/images/register.png"
alt="a nurse with a cute look"
width="400"
height="500"
/>
</div>
{/* our main registration code */}
<div className="registration-form">
<h1 className="main-heading mb-3">registration form</h1>
<br />
<form onSubmit={handleSubmit}>
<div>
<label htmlFor="email">email</label>
<input
type="text"
name="email"
value={user.email}
onChange={handleInput}
placeholder="email"
/>
</div>
<div>
<label htmlFor="password">password</label>
<input
type="password"
name="password"
value={user.password}
onChange={handleInput}
placeholder="password"
/>
</div>
<br />
<button type="submit" className="btn btn-submit">
Register Now
</button>
</form>
</div>
</div>
</div>
</main>
</section>
</>
);
};