mirror of https://github.com/halo-dev/halo-admin
Redirect to Login page when logging off
parent
26037bef9b
commit
79ed569307
|
@ -221,6 +221,7 @@ export const constantRouterMap = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: '/login',
|
path: '/login',
|
||||||
|
name: 'Login',
|
||||||
meta: { title: '登录' },
|
meta: { title: '登录' },
|
||||||
component: () => import('@/views/user/Login')
|
component: () => import('@/views/user/Login')
|
||||||
},
|
},
|
||||||
|
|
|
@ -17,6 +17,13 @@ router.beforeEach((to, from, next) => {
|
||||||
if (to.meta.title) {
|
if (to.meta.title) {
|
||||||
document.title = to.meta.title + ' | Halo Dashboard'
|
document.title = to.meta.title + ' | Halo Dashboard'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (to.name !== 'Login' && !store.getters.token) {
|
||||||
|
Vue.$log.debug('Redirectint to Login page')
|
||||||
|
next({ name: 'Login' })
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
next()
|
next()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -26,6 +26,10 @@ const user = {
|
||||||
},
|
},
|
||||||
SET_INFO: (state, info) => {
|
SET_INFO: (state, info) => {
|
||||||
state.info = info
|
state.info = info
|
||||||
|
},
|
||||||
|
CLEAR_TOKEN: state => {
|
||||||
|
Vue.ls.remove(ACCESS_TOKEN)
|
||||||
|
state.token = null
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
actions: {
|
actions: {
|
||||||
|
@ -44,6 +48,41 @@ const user = {
|
||||||
reject(error)
|
reject(error)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
logout({ commit }) {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
commit('CLEAR_TOKEN')
|
||||||
|
adminApi
|
||||||
|
.logout()
|
||||||
|
.then(response => {
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
},
|
||||||
|
refreshToken({ commit }, refreshToken) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
adminApi
|
||||||
|
.refreshToken(refreshToken)
|
||||||
|
.then(response => {
|
||||||
|
const token = response.data.data
|
||||||
|
Vue.$log.debug('Got token', token)
|
||||||
|
commit('SET_TOKEN', token)
|
||||||
|
|
||||||
|
resolve(response)
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
const data = error.response.data
|
||||||
|
Vue.$log.debug('Refresh error data', data)
|
||||||
|
if (data && data.status === 400 && data.data === refreshToken) {
|
||||||
|
// The refresh token expired
|
||||||
|
commit('CLEAR_TOKEN')
|
||||||
|
}
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import 'nprogress/nprogress.css'
|
||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
import { message } from 'ant-design-vue'
|
import { message } from 'ant-design-vue'
|
||||||
import store from '@/store'
|
import store from '@/store'
|
||||||
|
import router from '@/router'
|
||||||
|
|
||||||
const service = axios.create({
|
const service = axios.create({
|
||||||
baseURL: process.env.NODE_ENV === 'production' ? '' : 'http://localhost:8090',
|
baseURL: process.env.NODE_ENV === 'production' ? '' : 'http://localhost:8090',
|
||||||
|
@ -55,6 +56,16 @@ service.interceptors.response.use(
|
||||||
// TODO handle 400 status error
|
// TODO handle 400 status error
|
||||||
} else if (data.status === 401) {
|
} else if (data.status === 401) {
|
||||||
// TODO handle 401 status error
|
// TODO handle 401 status error
|
||||||
|
if (store.getters.token && store.getters.token.access_token === data.data) {
|
||||||
|
// Token expired
|
||||||
|
// TODO Refresh token
|
||||||
|
store.dispatch('refreshToken', store.getters.token.refresh_token).then(response => {
|
||||||
|
Vue.$log.debug('Refresh token successfully')
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// Login
|
||||||
|
router.push({ name: 'Login' })
|
||||||
|
}
|
||||||
} else if (data.status === 403) {
|
} else if (data.status === 403) {
|
||||||
// TODO handle 403 status error
|
// TODO handle 403 status error
|
||||||
} else if (data.status === 404) {
|
} else if (data.status === 404) {
|
||||||
|
|
Loading…
Reference in New Issue