login in frontend

This commit is contained in:
Lorenz Hohermuth 2025-06-06 08:48:55 +02:00
parent cfabd4e7ff
commit 5ac961330e
3 changed files with 66 additions and 21 deletions

View File

@ -68,4 +68,38 @@ export const postUser = async (content) => {
console.error('Failed to post user:', error.message); console.error('Failed to post user:', error.message);
throw new Error('Failed to save user. ' || error.message); throw new Error('Failed to save user. ' || error.message);
} }
}; };
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);
}
}

View File

@ -4,7 +4,7 @@ import { Outlet, Link } from "react-router-dom";
* Layout * Layout
* @author Peter Rutschmann * @author Peter Rutschmann
*/ */
const Layout = ({loginValues}) => { const Layout = ({ loginValues }) => {
return ( return (
<> <>
<nav> <nav>
@ -12,18 +12,18 @@ const Layout = ({loginValues}) => {
<p>{loginValues.email === '' ? 'No user logged in' : 'user:' + loginValues.email}</p> <p>{loginValues.email === '' ? 'No user logged in' : 'user:' + loginValues.email}</p>
<ul> <ul>
<li><a href="/">Secrets</a> <li><a href="/">Secrets</a>
<ul> <ul>
<li><Link to="/secret/secrets">my secrets</Link></li> <li><Link to="/secret/secrets">my secrets</Link></li>
<li><Link to="/secret/newcredential">new credential</Link></li> <li><Link to="/secret/newcredential">new credential</Link></li>
<li><Link to="/secret/newcreditcard">new credit-card</Link></li> <li><Link to="/secret/newcreditcard">new credit-card</Link></li>
<li><Link to="/secret/newnote">new note</Link></li> <li><Link to="/secret/newnote">new note</Link></li>
</ul> </ul>
</li> </li>
<li><a href="/">User</a> <li><a href="/">User</a>
<ul> <ul>
<li><Link to="/user/login">login</Link></li> <li><Link to="/user/login">login</Link></li>
<li><Link to="/user/register">register</Link></li> <li><Link to="/user/register">register</Link></li>
</ul> </ul>
</li> </li>
<li><a href="/">Admin</a> <li><a href="/">Admin</a>
<ul> <ul>
@ -38,10 +38,10 @@ const Layout = ({loginValues}) => {
</li> </li>
</ul> </ul>
</nav> </nav>
<hr/> <hr />
<Outlet/> <Outlet />
</> </>
) )
}; };
export default Layout; export default Layout;

View File

@ -1,16 +1,27 @@
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { loginUser } from '../../comunication/FetchUser';
/** /**
* LoginUser * LoginUser
* @author Peter Rutschmann * @author Peter Rutschmann
*/ */
function LoginUser({loginValues, setLoginValues}) { function LoginUser({ loginValues, setLoginValues }) {
const navigate = useNavigate(); const navigate = useNavigate();
const handleSubmit = async (e) => { const handleSubmit = async (e) => {
e.preventDefault(); 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 ( return (
@ -25,7 +36,7 @@ function LoginUser({loginValues, setLoginValues}) {
type="text" type="text"
value={loginValues.email} value={loginValues.email}
onChange={(e) => onChange={(e) =>
setLoginValues(prevValues => ({...prevValues, email: e.target.value}))} setLoginValues(prevValues => ({ ...prevValues, email: e.target.value }))}
required required
placeholder="Please enter your email *" placeholder="Please enter your email *"
/> />
@ -36,7 +47,7 @@ function LoginUser({loginValues, setLoginValues}) {
type="text" type="text"
value={loginValues.password} value={loginValues.password}
onChange={(e) => onChange={(e) =>
setLoginValues(prevValues => ({...prevValues, password: e.target.value}))} setLoginValues(prevValues => ({ ...prevValues, password: e.target.value }))}
required required
placeholder="Please enter your password *" placeholder="Please enter your password *"
/> />
@ -49,4 +60,4 @@ function LoginUser({loginValues, setLoginValues}) {
); );
} }
export default LoginUser; export default LoginUser;