728x90
반응형
※ 본사 지점은 무시하셔도 됩니다.
1. html 코드
기본적으로 사업자번호(아이디)와 비밀번호를 입력하도록 설계하였다.
<form action="" method="post" id="login-form2" class="margin-bottom-0" onsubmit="login('login-form2','CNU2','ANA2','PW2');">
<!--사업자번호-->
<div class="form-group m-b-20">
<input id="CNU2" name = "CNU2" type="text" class="form-control form-control-lg inverse-mode" placeholder="{{__('business_number')}}" required />
</div>
<!--비밀번호-->
<div class="form-group m-b-20">
<input id="PW2" name = 'PW2' type="password" class="form-control form-control-lg inverse-mode" placeholder="{{__('pw')}}" required />
</div>
<!--버튼-->
<div class="login-buttons">
<button type="submit" class="btn btn-primary btn-block btn-lg">{{__('login')}}</button>
<li class="form-control-lg inverse-mode"><a href="/register" >{{__('signup')}}</a> / <a href="/find" > {{__('findpw')}}</a></li>
</div>
</form>
2. script부분에서 input을 parsley로 형식을 검사한 후에 loginAjax를 실행하도록 하였다.
function login(form, companyNumber, agentInfo, password) {
var CNU = document.getElementsByName(companyNumber)[0].value;
var ANU = document.getElementsByName(agentInfo)[0].value.split("/")[0];
var ANA = document.getElementsByName(agentInfo)[0].value.split("/")[1];
var PW = document.getElementsByName(password)[0].value;
var validateCNU = $('#'+form).parsley();
if(validateCNU.isValid() == true) {
loginAjax(CNU,ANU,ANA,PW);
}
event.preventDefault();
}
3. loginAjax() 함수로 백엔드에 데이터를 보낸 후 성공할 경우 어떻게 할건지를 정의한다.
// 로그인 기능
function loginAjax(companyNumber, agentNumber, agentName, password) {
$.ajax({
type: 'POST',
url: 'auth/login',
dataType: 'json',
data: {
CNU: companyNumber,
ANU: agentNumber,
ANA: agentName,
PW: password
}
}).done(function(data) {
if(data.result == 'success') {
location = '/main';
}
else if(data.result == 'fail') {
alert(i18nconvert('login_error'));
}
else {
alert(i18nconvert('login_fail'));
}
});
}
3. 백엔드쪽에서 올바른 데이터가 들어왔을 경우 로그인 정보를 쿠키에 담아준다.
//login 진행 할경우 토큰 만들어서 cookie에 넣음
router.post("/login", async(req, res, next) => {
const {CNU, ANU, ANA, PW} = req.body;
try {
const company = await modelQuery(QUERY.Findone,COLLECTION_NAME.Company,{ "CNU" : CNU+ANU, "ANA" : ANA, "ANU" : ANU },{});// CNU에 맞는 데이터 찾아오기
if(company) {
//bcrypt 암호화된 PW와 입력 PW 비교
if(bcrypt.compareSync(PW, company.PW) ){
const token = jwt.sign({ CNU : company.CNU, ANU : company.ANU, ANA : company.ANA, CNA : company.CNA, CID : company._id, AH : company.AH },// 토큰의 내용(payload)
secretObj.secret, // 비밀 키
{ expiresIn: '1440m' }); // 유효 시간은 1440분 하루 설정
res.cookie("token", token); // 쿠키에 token 등록
return res.send({ result : 'success' });
}
else{
return res.send({ result : "fail" });
}
}
else {
return res.send({ result : "fail" });
}
} catch(err){
res.send({ result : "fail" });
console.error(err);
next(err);
}
});
페이지마다 미들웨어를 설정해서 로그인된 정보가 쿠키에 없을 경우에 로그인 화면이나 원하는 화면으로 돌아가도록
설정을 해주면 좋다!
728x90
반응형
'Node.js - JQuery' 카테고리의 다른 글
Node.js , JQuery | 비밀번호 찾기 | 화면 구성 (0) | 2021.09.14 |
---|---|
Node.js , JQuery | 로그인 만들기 | 미들웨어 (0) | 2021.09.14 |
Node.js , JQuery | 회원가입 만들기 | 인증번호 이메일 전송(2) (0) | 2021.09.14 |
Node.js , JQuery | 회원가입 만들기 | 인증번호 이메일 전송(1) (0) | 2021.09.14 |
Node.js , JQuery | 회원가입 만들기 | 주소 검색 (0) | 2021.09.14 |