// util.js
var util = {};
util.parseError = function(errors){
...
}
util.isLoggedin = function(req, res, next){
if(req.isAuthenticated()){
next();
}
else {
req.flash('errors', {login:'Please login first'});
res.redirect('/login');
}
}
util.noPermission = function(req, res){
req.flash('errors', {login:"You don't have permission"});
req.logout();
res.redirect('/login');
}
module.exports = util;
isloggedin
사용자가 로그인이 되었는지 아닌지를 판단하여 로그인이 되지 않은 경우 사용자를 에러 메시지와 함께 로그인 페이지로 보내는 함수
noPermission
어떠한 route에 접근 권한이 없다고 판단된 경우 호출되어 에러 메시지와 함께 로그인 페이지로 보내는 함수. isloggedin
과 다르게 접근권한이 있는지 없는지를 판단하지는 않는데, 상황에 따라서 판단 방법이 다르기 때문이다.
// routes/posts.js
...
// New
router.get('/new', util.isLoggedin, function(req, res){ // 2
...
});
// create
router.post('/', util.isLoggedin, function(req, res){ // 2
// ...
});
...
// edit
router.get('/:id/edit', util.isLoggedin, checkPermission, function(req, res){ // 2, 3
// ...
});
// update
router.put('/:id', util.isLoggedin, checkPermission, function(req, res){ // 2, 3
// ...
});
// destroy
router.delete('/:id', util.isLoggedin, checkPermission, function(req, res){ // 2, 3
// ...
});
module.exports = router;
// private functions // 1
function checkPermission(req, res, next){
Post.findOne({_id:req.params.id}, function(err, post){
if(err) return res.json(err);
if(post.author != req.user.id) return util.noPermission(req, res);
next();
});
}
Post에서 checkPermission
함수는 해당 게시물에 기록된 author와 로그인된 user.id
를 비교하여 같은 경우에만 next()
다르다면 util.noPermission
을 호출하여 login화면으로 돌려보낸다.
Uploaded by Notion2Tistory v1.1.0