Sails.js Tutorial : 로그인/로그아웃 처리하기
- 명색이 관리자 화면인데, 아무나 들어와서 조작하면 안되겠지요? 이제는 마지막으로 로그인/로그아웃 처리를 해보겠습니다. 로그인/로그아웃은 세션을 이용해서 구현합니다.
- 로그인 화면을 구성합니다.
xyz/views/mgmt/index.ejs
을 수정합니다.<!DOCTYPE html> <html lang="ko"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Login</title> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> </head> <body> <div class="container" style="margin-top: 20px"> <form action="/mgmt/login" method="post" class="form-horizontal" style="margin: 0 auto; max-width: 360px;"> <input type='hidden' name='_csrf' value='<%= _csrf %>'> <div class="form-group"> <label for="userid" class="col-sm-3 control-label">아이디</label> <div class="col-sm-9"> <input type="text" id="userid" name="userid" class="form-control" placeholder="당신의 ID를 입력하세요..." required autofocus> </div> </div> <div class="form-group"> <label for="passwd" class="col-sm-3 control-label">비밀번호</label> <div class="col-sm-9"> <input type="password" id="passwd" name="passwd" class="form-control" placeholder="비밀번호를 입력하세요..." required> </div> </div> <input type="submit" class="btn btn-primary btn-block" value="로그인" /> </form> </div> <!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> </body> </html>
- http://localhost:1337/mgmt/ 에 접속하면 로그인화면이 나올 것입니다.
xyz/api/models/Admin.js
에 다음을 추가합니다.... isMember: function(userid, password, cb) { const enc_passwd = crypto.createHash('sha256').update(password).digest('base64'); Admin.count({userid: userid, password: enc_passwd}).exec(function (err, cnt) { let is_member = false; if (cnt != 0) { is_member = true; } cb(err, is_member); }); }, ...
xyz/api/controllers/mgmt/MainController.js
에 다음을 추가한다.... // 로그인 login: function (req, res) { let userid = req.body.userid; let passwd = req.body.passwd; Admin.isMember(userid, passwd, function (err, is_member) { if (is_member == true) { req.session.mgmt_login = true; res.redirect('/mgmt/admin'); return; } res.redirect('/mgmt'); }); }, ...
xyz/config/routes.js
에 다음을 추가한다.... 'post /mgmt/login' : 'mgmt/MainController.login', ...
xyz/api/controllers/mgmt/MainController.js
에 다음을 추가한다.... // 로그아웃 logout: function (req, res) { req.session.mgmt_login = undefined; res.redirect('/mgmt'); }, ...
xyz/config/routes.js
에 다음을 추가한다.... 'get /mgmt/logout' : 'mgmt/MainController.logout', ...
이제, 로그인도 해보고, 로그아웃도 해보세요. ^^
- isAdminLoggedIn Policy 를 생성한다.
xyz/api/policies/isAdminLoggedIn.js
내용은 아래와 같이 작성한다./** * isAdminLoggedIn */ module.exports = function(req, res, next) { if (req.session.mgmt_login) { return next(); } res.redirect('/mgmt'); };
xyz/config/policies.js
에 다음 내용을 추가한다.... 'mgmt/MainController': { '*': true, }, 'mgmt/AdminController': { '*': 'isAdminLoggedIn', }, ...
- 여기까지 작성하면, 로그인해야만 http://localhost:1337/mgmt/admin 을 접근할 수 있게 된다.
댓글
댓글 쓰기