source: my-react-app/src/components/Login.js@ 24819a8

main
Last change on this file since 24819a8 was 24819a8, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Authorization layer

  • Property mode set to 100644
File size: 1.8 KB
RevLine 
[303f51d]1import React, { useState } from 'react';
2import axios from 'axios';
3import {useNavigate} from "react-router-dom";
[a3d63eb]4
[303f51d]5const Login = ({ onLogin }) => {
[a3d63eb]6 const navigate = useNavigate();
[303f51d]7 const [credentials, setCredentials] = useState({ username: '', password: '' });
[a3d63eb]8
[303f51d]9 const handleChange = (e) => {
10 const { name, value } = e.target;
11 setCredentials({ ...credentials, [name]: value });
12 };
13
14 const handleSubmit = async (e) => {
15 e.preventDefault();
16 try {
17 const response = await axios.post('http://localhost:8080/api/login', {
18 email: credentials.username,
19 password: credentials.password
20 });
21 const { token } = response.data;
22 // Store token securely (e.g., using HTTP cookies)
23 localStorage.setItem('token', token);
[a3d63eb]24
[303f51d]25 navigate("/")
26 } catch (error) {
27 // Handle login failure
28 console.error('Login failed:', error);
29 }
30 };
[a3d63eb]31
32
33 return (
34 <div>
[303f51d]35 <h2>Login</h2>
36 <form onSubmit={handleSubmit}>
37 <div>
38 <label>Username:</label>
39 <input
40 type="text"
41 name="username"
42 value={credentials.username}
43 onChange={handleChange}
44 />
[a3d63eb]45 </div>
[303f51d]46 <div>
47 <label>Password:</label>
48 <input
49 type="password"
50 name="password"
51 value={credentials.password}
52 onChange={handleChange}
53 />
[a3d63eb]54 </div>
[303f51d]55 <button type="submit">Login</button>
[a3d63eb]56 </form>
57 </div>
[303f51d]58 );
59};
[a3d63eb]60
[303f51d]61export default Login;
Note: See TracBrowser for help on using the repository browser.