Skip to content
Snippets Groups Projects
Login.jsx 2.27 KiB
Newer Older
  • Learn to ignore specific revisions
  • import React, { useState } from "react";
    
    import PropTypes from "prop-types";
    
    import {Link, Navigate} from "react-router-dom"; // Import Link from React Router
    
    import './Login.css'; // Import your external CSS file
    
    export const Login = ({ setToken }) => {
    
      const [email, setEmail] = useState();
      const [pass, setPass] = useState();
    
      const [loading, setLoading] = useState(false);
      const [error, setError] = useState("");
    
      const [loggedIn, setLoggedIn] = useState(false);
    
      const handleSubmit = (e) => {
        e.preventDefault();
    
        Axios.post("http://localhost:8080/auth/login", {
          email: email,
          password: pass,
        }).then((response) => {
    
          console.log(response);
          // console.log(response.data.login);
    
          if (response.data.result === "success") {
    
            setLoggedIn(true);
    
          } else {
    
            setError("Invalid email or password. Please try again.");
          }
        }).catch((error) => {
            setError("An error occurred. Please try again later.");
            console.error("Login error:", error);
          })
          .finally(() => {
            setLoading(false);
          });
    
      if (loggedIn) {
        return <Navigate to="/" />;
      }
    
      return (
        <div className="auth-form-container">
          <h2>Login</h2>
          <form className="login-form" onSubmit={handleSubmit}>
    
            <label htmlFor="email">PID</label>
    
              value={email}
              onChange={(e) => setEmail(e.target.value)}
              type="email"
              placeholder="Your Email"
              id="email"
              name="email"
    
            />
            <label htmlFor="password">Password</label>
            <input
              value={pass}
              onChange={(e) => setPass(e.target.value)}
              type="password"
              placeholder="********"
              id="password"
              name="password"
            />
    
            {loading ? (
              <p>Loading...</p>
            ) : (
              <button type="submit">Log In</button>
            )}
            {error && <p className="error-message">{error}</p>}
    
            {/* Add a Link to the Register page */}
            <p>Don't have an account? <Link to="/register">Register here</Link></p>
    
    Login.propTypes = {
      setToken: PropTypes.func.isRequired
    };
    
    export default Login;