금융프로젝트

[react][spring]로그인 페이지

h-yujin 2022. 10. 25. 15:51

탭 페이지 구현

아이디 로그인과 인증서 로그인 두 가지 탭을 만들어서 탭을 클릭하면 각각의 페이지가 보이는 기능을 구현한다.

인증서 로그인 CSS

const CertLoginBox = styled.div`
margin: 0 auto;
margin-top:5vh;
width: 60vw;
height: 60vh;
background: #FFFFFF;
`;

const ButtonStyle = styled.button`
float:right;
width: 30vw;
height: 10vh;
font-family: 'Manjari';
font-style: normal;
font-weight: 700;
font-size: 2rem;

text-align: center;
background: #D9D9D9;
border:0;
`;
const TitleStyle = styled.p`
position: absolute;
left: 20vw;
top: 5vh;
width: 30vw;
height: 10vh;
font-family: 'Manjari';
font-style: normal;
font-weight: 700;
font-size: 2rem;
padding-top: 3vh;
text-align: center;
`;

아이디 로그인 CSS

const IdButtonStyle = styled.button`
float:left;
width: 30vw;
height: 10vh;
font-family: 'Manjari';
font-style: normal;
font-weight: 700;
font-size: 2rem;

text-align: center;
background: #D9D9D9;
border:0;
`;
const IdTitleStyle = styled.p`
position: absolute;
left: 50vw;
top: 5vh;
width: 30vw;
height: 10vh;
font-family: 'Manjari';
font-style: normal;
font-weight: 700;
font-size: 2rem;
padding-top: 3vh;
text-align: center;
`;
const InputStyle = styled.input`
box-sizing: border-box;

position: absolute;
width: 30vw;
height: 4vh;
left: 35vw;
margin-top:25vh;

background: #FFFFFF;
border: 1px solid #000000;
`;

배경 CSS

빨간 박스의 부분은 div태그로 감쌌다.

const BackStyle = styled.div`

position: absolute;
width: 100vw;
height: 70vh;
top: 17vh;
background-color: #FFF5E5;
`;

탭 기능 구현

  • 태그
return (
        <div>
            <Header/>
            <BackStyle>
                <CertLoginBox style={certStyle}>
                    <TitleStyle>인증서 로그인</TitleStyle>
                    <ButtonStyle onClick={clickCert} >아이디 로그인</ButtonStyle>
                    <InputStyle placeholder='이름 김국민' name = "userName" onChange={certChange}></InputStyle><br></br><br></br>
                    <InputStyle placeholder='생년월일 YYMMDD'name="userBirth" onChange={certChange}></InputStyle><br></br><br></br>
                    <InputStyle style={buttonStyle} type="button" value="로그인" onClick={certLogin}></InputStyle><br></br><br></br>
                </CertLoginBox>
                <CertLoginBox style={idStyle}>
                    <IdButtonStyle onClick={clickId} >인증서 로그인</IdButtonStyle>
                    <IdTitleStyle>아이디 로그인</IdTitleStyle>
                    <InputStyle placeholder='ID'name="userId" onChange={idChange}></InputStyle><br></br><br></br>
                    <InputStyle placeholder='PASSWORD'name="userPassword" onChange={idChange}></InputStyle><br></br><br></br>
                    <InputStyle style={buttonStyle} type="button" value="로그인" onClick={idLogin}></InputStyle><br></br><br></br>
                </CertLoginBox>
            </BackStyle>
        </div>
    );
  • 탭 기능 구현
const navigate = useNavigate();
    const buttonStyle = { "border": "0", "backgroundColor": "#FFD74B" };
    const [certStyle, setCertStyle] = useState({ "display": "block" });
    const [idStyle, setIdStyle] = useState({ "display": "none" });
//인증서 로그인 클릭시
    const clickCert = (e) => {
        setCertStyle({ "display": "none" });
        setIdStyle({ "display": "block" });
    };
//아이디 로그인 클릭시
    const clickId = (e) => {
        setCertStyle({ "display": "block" });
        setIdStyle({ "display": "none" });
    };
//서버로 데이터 전송
    const [certUser, setCertUser] = useState({"userName":"","userBirth":""});
    const [idUser, setIdUser] = useState({"userId":"","userPassword":""});
    const certChange = (e) => { 
        setCertUser({ ...certUser, [e.target.name]: e.target.value });
    };
    const idChange = (e) => {
        setIdUser({ ...idUser, [e.target.name]: e.target.value });
        console.log(idUser);
    };
    const certLogin = () => {
        fetch("<http://localhost:9090/bank/certLogin>", {
            credentials:"include",
            method: "post",
            headers:{
                "Content-Type":"application/json;charset=utf-8"
            },
            body: JSON.stringify(certUser)
        }).then(res => { 
            if (res.status === 500) {
                alert("아이디가 존재하지 않습니다.");
            }
            return res.json();
        }).then(res => {
            if (res.content == "success") {
                alert("로그인 되었습니다.");
                navigate("/");
            } else { 
                alert("비밀번호가 틀렸습니다.");
                setIdUser({ "userId": "", "userPassword": "" });
            }
           
        });
    };
   
    const idLogin = () => { 
        fetch("<http://localhost:9090/bank/idLogin>", {
            credentials:"include",
            method: "post",
            headers:{
                "Content-Type":"application/json;charset=utf-8"
            },
            body: JSON.stringify(idUser)
        }).then(res => { 
            if (res.status === 500) {
                alert("아이디가 존재하지 않습니다.");
            }
            return res.json();
        }).then(res => {
            if (res.content == "success") {
                alert("로그인 되었습니다.");
            } else { 
                alert("비밀번호가 틀렸습니다.");
            }
           
        });
    };

style 속성을 useState로 정의한다.