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