diff --git a/183_12_2_tresorfrontend_rupe-master/src/comunication/FetchUser.js b/183_12_2_tresorfrontend_rupe-master/src/comunication/FetchUser.js index 25aef35..ddce577 100644 --- a/183_12_2_tresorfrontend_rupe-master/src/comunication/FetchUser.js +++ b/183_12_2_tresorfrontend_rupe-master/src/comunication/FetchUser.js @@ -68,4 +68,38 @@ export const postUser = async (content) => { console.error('Failed to post user:', error.message); throw new Error('Failed to save user. ' || error.message); } -}; \ No newline at end of file +}; + +export const loginUser = async (loginValue) => { + const protocol = process.env.REACT_APP_API_PROTOCOL; // "http" + const host = process.env.REACT_APP_API_HOST; // "localhost" + const port = process.env.REACT_APP_API_PORT; // "8080" + const path = process.env.REACT_APP_API_PATH; // "/api" + const portPart = port ? `:${port}` : ''; // port is optional + const API_URL = `${protocol}://${host}${portPart}${path}`; + + try { + + const response = await fetch(`${API_URL}/users/login`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + email: `${loginValue.email}`, + password: `${loginValue.password}`, + }) + }); + + if (!response.ok) { + const errorData = await response.json; + throw new Error(errorData.message || 'Server response failed.'); + } + const data = response; + console.log('User successfully logged in:', data); + return true; + } catch (error) { + console.error('Failed to log in:', error.message); + throw new Error('Failed to log in. ' || error.message); + } +} diff --git a/183_12_2_tresorfrontend_rupe-master/src/pages/Layout.js b/183_12_2_tresorfrontend_rupe-master/src/pages/Layout.js index bcb86d6..f859718 100644 --- a/183_12_2_tresorfrontend_rupe-master/src/pages/Layout.js +++ b/183_12_2_tresorfrontend_rupe-master/src/pages/Layout.js @@ -4,7 +4,7 @@ import { Outlet, Link } from "react-router-dom"; * Layout * @author Peter Rutschmann */ -const Layout = ({loginValues}) => { +const Layout = ({ loginValues }) => { return ( <> -
- +
+ ) }; -export default Layout; \ No newline at end of file +export default Layout; diff --git a/183_12_2_tresorfrontend_rupe-master/src/pages/user/LoginUser.js b/183_12_2_tresorfrontend_rupe-master/src/pages/user/LoginUser.js index 72aaa8b..88e75eb 100644 --- a/183_12_2_tresorfrontend_rupe-master/src/pages/user/LoginUser.js +++ b/183_12_2_tresorfrontend_rupe-master/src/pages/user/LoginUser.js @@ -1,16 +1,27 @@ import { useNavigate } from 'react-router-dom'; +import { loginUser } from '../../comunication/FetchUser'; /** * LoginUser * @author Peter Rutschmann */ -function LoginUser({loginValues, setLoginValues}) { +function LoginUser({ loginValues, setLoginValues }) { const navigate = useNavigate(); const handleSubmit = async (e) => { e.preventDefault(); - console.log(loginValues); - navigate('/') + + try { + let isLoginValid = false + isLoginValid = await loginUser(loginValues); + console.log(loginValues); + if (isLoginValid) { + setLoginValues({ userName: loginValues.email, password: loginValues.password }); + navigate('/'); + } + } catch (error) { + console.error('Failed to fetch to server:', error.message); + } }; return ( @@ -25,7 +36,7 @@ function LoginUser({loginValues, setLoginValues}) { type="text" value={loginValues.email} onChange={(e) => - setLoginValues(prevValues => ({...prevValues, email: e.target.value}))} + setLoginValues(prevValues => ({ ...prevValues, email: e.target.value }))} required placeholder="Please enter your email *" /> @@ -36,7 +47,7 @@ function LoginUser({loginValues, setLoginValues}) { type="text" value={loginValues.password} onChange={(e) => - setLoginValues(prevValues => ({...prevValues, password: e.target.value}))} + setLoginValues(prevValues => ({ ...prevValues, password: e.target.value }))} required placeholder="Please enter your password *" /> @@ -49,4 +60,4 @@ function LoginUser({loginValues, setLoginValues}) { ); } -export default LoginUser; \ No newline at end of file +export default LoginUser;