반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- component is already mounted please use $fetch instead.
- in-memory pm2 is out-of-date
- pm2 업데이트 에러
- d3 지도
- pm2 버전 충돌
- vue draggable 차트 안나옴
- commonjs와 ecmascript modules(esm)
- git
- 함수형 프로그래밍
- d3 지도 툴팁
- vue3 drag and drop
- ToDo
- d3 지도 타입스크립트
- 인터넷 거버넌스
- cloud firestore id auto increment
- $fetch
- d3 지도 확대/축소
- vue composable 함수
- firebase id 자동
- 화살표 함수 {}
- reflow
- nuxt universal rendering
- repaint
- ecmascript modules(esm)
- vue 컴포저블 함수
- 참조형 default
- 참조형 props의 default
- vuedraggable
- Learning React
- 화살표 함수 중괄호
Archives
- Today
- Total
빵 입니다.
화면별 권한 설정 본문
반응형
화면별 권한이 필요할 경우, vue-router에서 제공하는 네비게이션 가드를 이용해 화면에 접근 후 발생하는 이벤트들을 관리할 수 있다.
📌네비게이션 가드
vue-router가 제공하는 네비게이션 가드는 주로 리디렉션하거나 취소하여 네비게이션을 보호하는 데 사용한다.
🧿전역 가드
router.beforeEach를 사용하여 보호하기 이전에 전역 등록을 할 수 있다.
🧿라우트 별 가드
beforeEnter 가드를 라우트의 설정 객체에 직접 정의 할 수 있다.
나의 경우 전역 가드와 라우트 별 가드 둘 다 설정했다.
프로젝트에 JWT를 적용했는데, 토큰 유무뿐만 아니라 토큰이 있어도 유효 기간이 만료된 경우도 있어서 일괄 처리를 위해 전역 가드를 사용했고 , 사용자가 이미 로그인한 상태에서 다시 로그인 화면에 접근하면 홈 화면으로 리디렉션 하도록 개별 라우트 가드를 사용했다.
📌화면 경우의 수
- 권한이 없어도 되는 화면(로그인)
next() 실행 - 권한이 있어야 하는 화면(나머지 화면)
2-1. 권한 있어야 하는 화면 + 토큰이 없는 경우
next('/') 실행
2-2. 권한 있어야 하는 화면 + 토큰이 있는 경우
next() 실행
2-3. 권한 있어야 하는 화면 + 토큰이 있지만 만료된 경우
next('/') 실행
const router = createRouter({
history: createWebHistory(import.meta.env.BASE_URL),
routes: [
{
path: '/',
component: FullContainer,
children: [
{
path: '/',
name: 'login',
component: Login,
meta: { authorized: false },
// 각 라우트에 별도로 줄 수 있는 가드 beforeEnter
// 로그인 화면 진입 전 토큰 체크하고 토큰이 있으면 home 화면으로 이동
// => 사용자가 이미 로그인한 상태에서 로그인 화면(/ 경로)에 접근하는 것을 방지하기 위해 설정
beforeEnter(to, from, next) {
const token = getToken()
if (token) {
next('/home')
} else {
next()
}
}
},
{
path: '/home',
name: 'home',
component: Home,
// 라우트 메타 필드 설정
// authorized => 토큰이 필요한지 미리 설정
meta: { authorized: true }
}
]
},
]
})
// 네비게이션 가드 > 전역 가드 설정
router.beforeEach(async (to, from, next) => {
const token = getToken()
const userStore = useUserStore()
// to => 대상 Route 객체
// 대상 Route 객체가 가지고 있는 메타 필드 값 중 authorized가 true이면 토큰이 필요한 화면
if (to.meta.authorized && !token) {
// 토큰이 필요한 화면인데, 토큰이 없거나 유효하지 않다면(만료된 토큰)
// 토큰 리셋을 위해 로그아웃(토큰 리셋 코드가 포함되어 있음)하고
await userStore.actionHttpLogout()
// 슬래시('/') 화면으로 리디렉션
next('/')
} else {
// next() => 파이프라인의 다음 훅으로 이동
next()
}
})
export default router
Vue-router 공홈은 설명이 참 잘 되어있다!
https://v3.router.vuejs.org/kr/guide/advanced/navigation-guards.html
네비게이션 가드 | Vue Router
네비게이션 가드 이름에서 알 수 있듯이 vue-router가 제공하는 네비게이션 가드는 주로 리디렉션하거나 취소하여 네비게이션을 보호하는 데 사용됩니다. 라우트 탐색 프로세스에 연결하는 방법
v3.router.vuejs.org
반응형
'프론트엔드 > Vue' 카테고리의 다른 글
Chart.js 툴팁 레이블 색상 변경, 레전드 레이블 색상 변경 (0) | 2024.07.31 |
---|---|
Chart.js 축 font-size 조절 (0) | 2024.07.30 |
[Vue warn]: inject() can only be used inside setup() or functional components. (0) | 2024.02.26 |
Vue3와 Vuetify3 (0) | 2024.01.29 |
vue-router 변경 감지 (동적 라우팅의 문제점) (0) | 2022.12.12 |