Protector/Public middleware

김종민·2022년 10월 31일
0

Youtube

목록 보기
12/23

loggedIn 상태에 따라
page에 접근여부를 결정하게 하는 middleWare


1. src/middleware.js

import multer from 'multer'

export const localsMiddleware = (req, res, next) => {
  res.locals.loggedIn = Boolean(req.session.loggedIn)
  res.locals.loggedInUser = req.session.user || {}
  res.locals.siteName = 'jmTube'
  next()
}
///pug파일에서 loggedIn, loggedInUser, siteName등으로
///모든 pug 파일에서 접근 가능하게 만들어 놓는 middleware

export const protectorMiddleware = (req, res, next) => {
  if (req.session.loggedIn) {
    return next()
  } else {
    return res.redirect('/login')
  }
}
///session에 loggedIn 값이 true이면 다음으로 갈 수 있게 하고,
///loggdeIn이 false면 로그인 page로 redirect 시키는 middleware

export const publicOnlyMiddleware = (req, res, next) => {
  if (!req.session.loggedIn) {
    return next()
  } else {
    return res.redirect('/')
  }
}
///session에 loggedIn 값이 false이면 다음으로 갈 수 있게 하고,
///loggdeIn이 trueㅇ면 홈으로 redirect 시키는 middleware


export const avatarUpload = multer({
  dest: 'uploads/avatars/',
  limits: {
    fileSize: 3000000,
  },
})
export const videoUpload = multer({
  dest: 'uploads/videos/',
  limits: {
    fileSize: 25000000,
  },
})

2. routes/rootRouter.js

import express from 'express'
import {
  getJoin,
  getLogin,
  postJoin,
  postLogin,
} from '../controllers/userController'
import { search, trending } from '../controllers/videoController'
import { publicOnlyMiddleware } from '../middlewares'

const rootRouter = express.Router()

rootRouter.get('/', trending)
rootRouter.route('/join').all(publicOnlyMiddleware).get(getJoin).post(postJoin)
///createAccount페이지는 loggedIn이 false인 경우만 
///접근가능하게 publicOnlyMiddleware를 넣어줌.

rootRouter
  .route('/login')
  .all(publicOnlyMiddleware)
  .get(getLogin)
  .post(postLogin)
  ///login 체이지는 loggedIn이 false인 경우만 
///접근가능하게 publicOnlyMiddleware를 넣어줌.
  
  
rootRouter.get('/search', search)


export default rootRouter

!!!반대의 경우인 loggedIn이 true인 경우만 접근 가능하게 하는
path들은 따로 POST하지는 않겠음. 너무 쉬우니깐.
profile
코딩하는초딩쌤

0개의 댓글