HyeonJun Jeon

[Add] Check ID/PW

1 -import { useEffect } from "react"; 1 +import { useEffect, useState } from "react";
2 import { useNavigate } from "react-router-dom"; 2 import { useNavigate } from "react-router-dom";
3 3
4 import { dataForage } from "../utils/LocalForage"; 4 import { dataForage } from "../utils/LocalForage";
5 +import "../styles/Login.css";
6 +import axios from "axios";
5 7
6 const Login = () => { 8 const Login = () => {
7 console.log("visit Login"); 9 console.log("visit Login");
10 + const [state, setState] = useState({
11 + id: "",
12 + pw: "",
13 + });
14 +
15 + const handleChangeState = (e) => {
16 + setState({
17 + ...state,
18 + [e.target.name]: e.target.value,
19 + });
20 + };
8 21
9 const navigate = useNavigate(); 22 const navigate = useNavigate();
10 const login = async () => { 23 const login = async () => {
11 - if (true) { 24 + const res = await axios.post("http://localhost:3001/login/", {
12 - //login success 25 + id: state.id,
13 - await dataForage.setItem("session", true); 26 + pw: state.pw,
27 + });
14 28
29 + if (res.data === "login failed") alert("ID/PW를 확인해주세요");
30 + else {
31 + await dataForage.setItem("session", true);
15 navigate("/"); 32 navigate("/");
16 } 33 }
17 }; 34 };
18 35
19 useEffect(() => { 36 useEffect(() => {
20 - async function render() { 37 + async function ifAlreadyLogined() {
21 if (await dataForage.getItem("session")) navigate("/"); 38 if (await dataForage.getItem("session")) navigate("/");
22 } 39 }
23 - render(); 40 + ifAlreadyLogined();
24 }, [navigate]); 41 }, [navigate]);
25 42
26 return ( 43 return (
27 <div className="Login"> 44 <div className="Login">
28 - <button onClick={login}>로그인</button> 45 + <div className="idpw">
46 + <input
47 + className="id"
48 + name="id"
49 + value={state.id}
50 + onChange={handleChangeState}
51 + onFocus={(e) => e.target.select()}
52 + placeholder="E-Campus ID"
53 + />
54 + <input
55 + className="pw"
56 + name="pw"
57 + value={state.pw}
58 + onChange={handleChangeState}
59 + onFocus={(e) => e.target.select()}
60 + placeholder="E-Campus Password"
61 + type="password"
62 + />
63 + </div>
64 + <button onClick={login}>Login</button>
29 </div> 65 </div>
30 ); 66 );
31 }; 67 };
......
1 +.Login {
2 + position: absolute;
3 + left: 50%;
4 + top: 50%;
5 + transform: translate(-50%, -50%);
6 + padding: 3px;
7 + display: flex;
8 +}
9 +
10 +.Login > button {
11 + padding: 0 30px 0 30px;
12 + font-size: x-large;
13 +}
14 +
15 +.idpw {
16 + display: flex;
17 + flex-direction: column;
18 + width: 200px;
19 + margin-right: 3px;
20 +}
21 +
22 +.idpw > input {
23 + height: 30px;
24 + padding: 5px 10px 5px 10px;
25 +}