네비게이션 가드
Updated:
네비게이션 가드
: 뷰 라우터로 특정 url에 접근할 때 해당 url의 접근을 막는 방법. 예를 들면 사용자의 인증정보가 없을시, 특정 페이지에 접근하지 못하도록 차단할 때 사용하는 기술
- 전역 가드: 애플리케이션 전역에서 동작하는 Ex) beforeEach()
- 라우터 가드: 특정 url에서만 동작하는 Ex) beforeEnter, beforeRouteEnter, beforeRouteLeave
- 컴포넌트가드 : 라우터 컴포넌트 안에 정의하는
전역가드
router.beforeEach(function(to, from, next)){
});
- to: 이동할 url 정보가 담긴 라우터 객체.
- from: 현재 url 정보가 담긴 라우터 객체.
- next: to에서 지정한 url로 이동하기 위해 꼭 호출해야 할 함수.
router.beforeEach()를 호출하고 나면 모든 라우팅은 대기상태. 원래 url이 변경되고 나면 url에 따라 화면 전환이 이루어저야 하는데 전역 가드를 설정해서 화면이 전환되지 않는다. 여기서 해당 url()로 라우팅 하기위해서는next()호출이 필요하다.
router.beforeEach((to, from, next) => {
next()
if(to.matched.components!==undefined){
if(to.matched.some( (item)=> item.components.meta.superAdmin)){
if(myAuth===authType.SUPERADMIN){
next();
}
else{
alert("권한이 없습니다.");
next(-1);
}
}
else{
next()
}
}
else{
next()
}
})
superadmin의 권한을 가지고 있는 유저만 해당 화면에 접근할 수 있다.
.some()은 자바스크립트 내장 API. 저장된 배열의 모든 요소를 검사하여 조건을 만족시키면 true값을 반환하고 아니면 false값을 반환한다.
라우터 가드
{
path: '*',
beforeEnter: (to, from, next) => {
next('/login')
}
}
특정 라우팅에 대해서 가드를 설정하는 방법.
컴포넌트 가드
const Login = {
template: '<p>Login Component<p>'
beforeRouteEnter (to, from, next){
//Login컴포넌트가 화면에 표시되기 전에 수행될 로직.
//Login컴포넌트는 아직 생성되지 않은 시점.
},
beforeRouteUpdate (to, from, next){
//화면에 표시된 컴포넌트가 변경될 때 수행될 로직
//this로 Login컴포넌트를 접근할 수 있다
},
beforeRouteLeave (to, from, next){
//Login 컴포넌트를 화면에 표시한 url값이 변경되기 직전의 로직
//'this'로 Login컴포넌트를 접근할 수 있다
}
}
reference
https://joshua1988.github.io/web-development/vuejs/vue-router-navigation-guards/
Leave a comment