const submit = async (e: React.FormEvent) => {
e.preventDefault();
setErrors([]);
try {
const res = await axios.post("http://localhost:8000/api/login", {
email,
password,
});
if (res.data.status) {
setIsAuthenticated(true);
} else {
setErrors([res.data.message || "Login failed"]);
}
} catch (err) {
setErrors(["Server error, try again later"]);
console.error(err);
}
};
<form onSubmit={submit} className="max-w-md mx-auto mt-10 p-8 bg-white rounded-xl shadow-lg">
<h1 className="text-xl text-indigo-600 text-center font-bold">Login</h1>
{errors.length >0 && <div className="text-2xl mb-4 p-3 bg-red-100 text-red-700 rounded">
<ul className="list-disc pl-5 space-y-1 text-sm">
{errors.map((error, index)=>
<li key={index}>{error}</li>
)}
</ul>
</div>
}
<div className="grid gap-2 my-2">
<label className="text-sm leading-none font-medium select-none peer-disabled:cursor-auto">
Email:
</label>
<input id="email" name="email" type="email" placeholder="Enter Your Email" value={email} onChange={(e)=>setEmail(e.target.value)} className="w-full px-3 py-2 mt-2 text-sm leading-none text-gray-800 bg-white border rounded focus:outline-none border-gray-300 shadow"/>
</div>
<div className="grid gap-2 my-2">
<label className="text-sm leading-none font-medium select-none peer-disabled:cursor-auto">
Password:
</label>
<input id="password" name="password" type="password" placeholder="Enter Your Password" value={password} onChange={(e)=>setPassword(e.target.value)} className="w-full px-3 py-2 mt-2 text-sm leading-none text-gray-800 bg-white border rounded focus:outline-none border-gray-300 shadow"/>
</div>
<button type="submit" className="bg-blue-500 text-white px-4 cursor-pointer py-2 rounded my-4 hover:bg-blue-600">
Login
</button>
</form>
Controller
Controller
public function login(Request $request)
{
if (!Auth::attempt($request->only("email","password")))
{
return response()->json(["errors" => ["Invalid Credentials"]]);
}
$user = Auth::user();
$input['name'] = $user->name;
$input['email'] = $user->email;
$input['token'] = $user->createToken("App")->plainTextToken;
return response()->json($input);
}
0 Comments