Showing
2 changed files
with
68 additions
and
7 deletions
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 | }; | ... | ... |
src/styles/Login.css
0 → 100644
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 | +} |
-
Please register or login to post a comment