-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add POST request for authentication
- Loading branch information
1 parent
812c4f7
commit fe7446d
Showing
3 changed files
with
139 additions
and
24 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,10 @@ | ||
"use client"; | ||
|
||
import React, { useState } from "react"; | ||
import { useRouter } from "next/navigation"; | ||
import Image from "next/image"; | ||
import Link from "next/link"; | ||
import { userAgentFromString } from "next/server"; | ||
|
||
export default function Page() { | ||
// const [isBlurred, setIsBlurred] = useState(false); | ||
|
@@ -11,6 +13,58 @@ export default function Page() { | |
// setIsBlurred(true); | ||
// }; | ||
|
||
const [userLogin, setUserLogin] = useState({ | ||
email: "", | ||
password: "", | ||
}); | ||
const [loginError, setLoginError] = useState<string>(""); | ||
const route = useRouter(); | ||
|
||
const fetchUserInfo = async () => { | ||
try { | ||
const res: Response = await fetch("/v1/user/login", { | ||
method: "POST", | ||
headers: { | ||
"Content-Type": "application/json", | ||
}, | ||
body: JSON.stringify(userLogin), | ||
}); | ||
if (res.ok) { | ||
const userInfo = await res.json(); | ||
return userInfo; | ||
} else { | ||
console.error("Failed to fetch user info:", res.statusText); | ||
return []; | ||
} | ||
} catch (error) { | ||
console.error("Error fetching user info:", error); | ||
return []; | ||
} | ||
}; | ||
|
||
const handleChange = (e: { target: { name: any; value: any } }) => { | ||
const { name, value } = e.target; | ||
setUserLogin({ | ||
...userLogin, | ||
[name]: value, | ||
}); | ||
}; | ||
|
||
const handleSubmit = async (e: { preventDefault: () => void }) => { | ||
e.preventDefault(); | ||
const info = await fetchUserInfo(); | ||
for (let i = 0; i < info.length; i++) { | ||
if (info[i].email === userLogin.email) { | ||
if (info[i].password === userLogin.password) { | ||
route.push(""); | ||
} else { | ||
setLoginError("Wrong password entered"); | ||
} | ||
} | ||
} | ||
setLoginError("Wrong email entered"); | ||
}; | ||
|
||
return ( | ||
<div className="flex h-screen"> | ||
<div className="h-screen bg-black py-8 px-32 w-1/2"> | ||
|
@@ -37,6 +91,7 @@ export default function Page() { | |
method="post" | ||
className="flex flex-col" | ||
// onClick={handleFormClick} | ||
onSubmit={handleSubmit} | ||
> | ||
<label htmlFor="email" className="text-white font-light py-2"> | ||
Email<span className="text-red-500">*</span> | ||
|
@@ -48,6 +103,7 @@ export default function Page() { | |
placeholder="[email protected]" | ||
required | ||
className="w-80 h-10 px-4 mb-8" | ||
onChange={handleChange} | ||
/> | ||
<label htmlFor="password" className="text-white font-light py-2"> | ||
Password<span className="text-red-500">*</span> | ||
|
@@ -59,7 +115,9 @@ export default function Page() { | |
placeholder="••••••••••" | ||
required | ||
className="w-80 h-10 px-4 mb-8" | ||
onChange={handleChange} | ||
/> | ||
{loginError && <p className="text-red-500 pb-2">{loginError}</p>} | ||
<input | ||
type="submit" | ||
value="LOG IN" | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -12,34 +12,61 @@ export default function Page() { | |
// setIsBlurred(true); | ||
// }; | ||
|
||
const [password, setPassword] = useState<string>(""); | ||
// const [password, setPassword] = useState<string>(""); | ||
const [reenteredPassword, setReenteredPassword] = useState<string>(""); | ||
const [passwordError, setPasswordError] = useState<string>(""); | ||
const [reenteredPasswordError, setReenteredPasswordError] = | ||
useState<string>(""); | ||
const [userData, setUserData] = useState({ | ||
email: "", | ||
password: "", | ||
netid: "", | ||
}); | ||
|
||
const handlePasswordChange = ( | ||
e: React.ChangeEvent<HTMLInputElement> | ||
): void => { | ||
const newPassword = e.target.value; | ||
setPassword(newPassword); | ||
setPasswordError(""); | ||
if (passwordError) setPasswordError(""); | ||
}; | ||
// const handlePasswordChange = ( | ||
// e: React.ChangeEvent<HTMLInputElement> | ||
// ): void => { | ||
// const newPassword = e.target.value; | ||
// setPassword(newPassword); | ||
// setPasswordError(""); | ||
// if (passwordError) setPasswordError(""); | ||
// }; | ||
|
||
const handleReenteredPasswordChange = ( | ||
e: React.ChangeEvent<HTMLInputElement> | ||
): void => { | ||
const newReenteredPassword = e.target.value; | ||
setReenteredPassword(newReenteredPassword); | ||
setReenteredPasswordError(""); | ||
if (reenteredPasswordError) setReenteredPasswordError(""); | ||
// const handleReenteredPasswordChange = ( | ||
// e: React.ChangeEvent<HTMLInputElement> | ||
// ): void => { | ||
// const newReenteredPassword = e.target.value; | ||
// setReenteredPassword(newReenteredPassword); | ||
// setReenteredPasswordError(""); | ||
// if (reenteredPasswordError) setReenteredPasswordError(""); | ||
// }; | ||
|
||
const postNewUser = async (userData: any) => { | ||
try { | ||
const res: Response = await fetch("/v1/user/login", { | ||
method: "POST", | ||
headers: { | ||
"Content-Type": "application/json", | ||
}, | ||
body: JSON.stringify(userData), | ||
}); | ||
if (res.ok) { | ||
const newUser = await res.json(); | ||
newUser.email = userData.email; | ||
newUser.password = userData.password; | ||
newUser.netid = userData.netid; | ||
} else { | ||
console.error("Failed to create user:", res.statusText); | ||
} | ||
} catch (error) { | ||
console.error("Error creating user:", error); | ||
} | ||
}; | ||
|
||
const handleSubmit = (e: React.FormEvent<HTMLFormElement>): void => { | ||
e.preventDefault(); | ||
const isValidPassword = validatePassword(password); | ||
const doPasswordsMatch = password === reenteredPassword; | ||
const isValidPassword = validatePassword(userData.password); | ||
const doPasswordsMatch = userData.password === reenteredPassword; | ||
|
||
if (!isValidPassword) { | ||
setPasswordError( | ||
|
@@ -52,10 +79,21 @@ export default function Page() { | |
setReenteredPasswordError("Passwords do not match."); | ||
return; | ||
} | ||
|
||
postNewUser(userData); | ||
console.log("Form submitted"); | ||
}; | ||
|
||
const handleChange = (e: { target: { name: any; value: any } }) => { | ||
const { name, value } = e.target; | ||
setUserData({ | ||
...userData, | ||
[name]: value, | ||
}); | ||
setPasswordError(""); | ||
setReenteredPassword(value); | ||
setReenteredPasswordError(""); | ||
}; | ||
|
||
return ( | ||
<div className="flex h-screen"> | ||
<div className="h-screen bg-black py-8 px-32 w-1/2"> | ||
|
@@ -84,6 +122,19 @@ export default function Page() { | |
// onClick={handleFormClick} | ||
onSubmit={handleSubmit} | ||
> | ||
<label htmlFor="email" className="text-white font-light py-2"> | ||
NetId<span className="text-red-500">*</span> | ||
</label> | ||
<input | ||
type="text" | ||
id="netid" | ||
name="netid" | ||
placeholder="abc123" | ||
required | ||
className="w-80 h-10 px-4 mb-8" | ||
value={userData.netid} | ||
onChange={handleChange} | ||
/> | ||
<label htmlFor="email" className="text-white font-light py-2"> | ||
Email<span className="text-red-500">*</span> | ||
</label> | ||
|
@@ -94,6 +145,8 @@ export default function Page() { | |
placeholder="[email protected]" | ||
required | ||
className="w-80 h-10 px-4 mb-8" | ||
value={userData.email} | ||
onChange={handleChange} | ||
/> | ||
<label htmlFor="password" className="text-white font-light py-2"> | ||
Password<span className="text-red-500">*</span> | ||
|
@@ -104,8 +157,8 @@ export default function Page() { | |
name="password" | ||
placeholder="••••••••••" | ||
required | ||
value={password} | ||
onChange={handlePasswordChange} | ||
value={userData.password} | ||
onChange={handleChange} | ||
className={`w-80 h-10 px-4 mb-8 ${ | ||
passwordError && "border-red-500" | ||
}`} | ||
|
@@ -128,6 +181,7 @@ export default function Page() { | |
className={`w-80 h-10 px-4 mb-8 ${ | ||
reenteredPasswordError && "border-red-500" | ||
}`} | ||
onChange={handleChange} | ||
/> | ||
{reenteredPasswordError && ( | ||
<p className="text-red-500 pb-2">{reenteredPasswordError}</p> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters