refreshToken

This commit is contained in:
shijing 2022-03-31 15:18:51 +08:00
parent e9cdb49787
commit e5ee1481de
6 changed files with 65 additions and 19 deletions

View File

@ -8,6 +8,14 @@ export function login(data) {
}) })
} }
export function refreshToken(data) {
return request({
url: '/auth/token/refresh/',
method: 'post',
data
})
}
export function logout() { export function logout() {
return request({ return request({
url: '/auth/token/black/', url: '/auth/token/black/',

View File

@ -25,7 +25,7 @@
import { Navbar, Sidebar, AppMain,TagsView } from './components' import { Navbar, Sidebar, AppMain,TagsView } from './components'
import ResizeMixin from './mixin/ResizeHandler' import ResizeMixin from './mixin/ResizeHandler'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { getToken } from '@/utils/auth' // get token from cookie import { getToken,getRefresh } from '@/utils/auth' // get token from cookie
export default { export default {
name: 'Layout', name: 'Layout',
components: { components: {
@ -64,12 +64,14 @@ export default {
}, },
mounted() { mounted() {
let hasToken = getToken(); let hasToken = getToken();
/*debugger;
console.log(hasToken);*/
if (hasToken) { if (hasToken) {
this.refreshCountData();
this.refreshtoken();
this.$store.dispatch("user/getCount", {}); this.$store.dispatch("user/getCount", {});
}else{
this.$router.push({name:'login'})
} }
// this.refreshCountData(); // console.log('$store.state.user.refresh:'+this.$store.state.user.refresh);
}, },
methods: { methods: {
refreshCountData(){ refreshCountData(){
@ -80,12 +82,23 @@ export default {
this.$store.dispatch("user/getCount", {}); this.$store.dispatch("user/getCount", {});
} }
},0) },0)
},5000) },50000)
},
refreshtoken(){
let refresh = getRefresh();
/* debugger;
console.log('refresh:'+refresh);
debugger;*/
// let refresh = this.$store.state.user.refresh;
this.timer = window.setInterval(() => {
if (refresh) {
this.$store.dispatch("user/refreshToken", refresh);
}
},3540000)
}, },
handleClickOutside() { handleClickOutside() {
this.$store.dispatch('app/closeSideBar', { withoutAnimation: false }) this.$store.dispatch('app/closeSideBar', { withoutAnimation: false })
}, },
gotoTicketPage(){ gotoTicketPage(){
let path = this.$route.path; let path = this.$route.path;
if(path==='/workflow/ticket'){ if(path==='/workflow/ticket'){

View File

@ -2,6 +2,7 @@ const getters = {
sidebar: state => state.app.sidebar, sidebar: state => state.app.sidebar,
device: state => state.app.device, device: state => state.app.device,
token: state => state.user.token, token: state => state.user.token,
refresh: state => state.user.refresh,
avatar: state => state.user.avatar, avatar: state => state.user.avatar,
name: state => state.user.name, name: state => state.user.name,
perms: state => state.user.perms, perms: state => state.user.perms,

View File

@ -1,12 +1,14 @@
import { login, logout, getInfo } from '@/api/user' import { login, logout, getInfo } from '@/api/user'
import { getCount } from '@/api/workflow' import { getCount } from '@/api/workflow'
import { getToken, setToken, removeToken } from '@/utils/auth' import { refreshToken } from '@/api/user'
import { getToken, setToken, removeToken,getRefresh, setRefresh } from '@/utils/auth'
import { resetRouter } from '@/router' import { resetRouter } from '@/router'
const getDefaultState = () => { const getDefaultState = () => {
return { return {
token: getToken(), token: getToken(),
name: '', name: '',
refresh: getRefresh(),
avatar: '', avatar: '',
count: {}, count: {},
perms: [] perms: []
@ -22,6 +24,9 @@ const mutations = {
SET_TOKEN: (state, token) => { SET_TOKEN: (state, token) => {
state.token = token state.token = token
}, },
SET_REFRESH: (state, refresh) => {
state.refresh = refresh
},
SET_NAME: (state, name) => { SET_NAME: (state, name) => {
state.name = name state.name = name
}, },
@ -44,9 +49,10 @@ const actions = {
login({ username: username.trim(), password: password }).then(response => { login({ username: username.trim(), password: password }).then(response => {
const { data } = response; const { data } = response;
commit('SET_TOKEN', data.access); commit('SET_TOKEN', data.access);
commit('SET_REFRESH', data.refresh);
setToken(data.access); setToken(data.access);
setRefresh(data.refresh);
resolve() resolve()
}).catch(error => { }).catch(error => {
reject(error) reject(error)
}) })
@ -118,6 +124,21 @@ const actions = {
}) })
}) })
} }
,
refreshToken({ commit },ref) {
return new Promise((resolve, reject) => {
refreshToken({refresh:ref}).then((res) => {
const { data } = res;
commit('SET_TOKEN', data.access);
// commit('SET_REFRESH', data.refresh);
setToken(data.access);
// setRefresh(data.refresh);
resolve()
}).catch(error => {
reject(error)
})
})
}
} }
export default { export default {

View File

@ -1,6 +1,7 @@
import Cookies from 'js-cookie' import Cookies from 'js-cookie'
const TokenKey = 'token' const TokenKey = 'token';
const refreshKey = 'refresh';
export function getToken() { export function getToken() {
return Cookies.get(TokenKey) return Cookies.get(TokenKey)
@ -13,13 +14,15 @@ export function setToken(token) {
export function removeToken() { export function removeToken() {
return Cookies.remove(TokenKey) return Cookies.remove(TokenKey)
} }
export function getRefresh() {
return Cookies.get(refreshKey)
}
export function setRefresh(refresh) {
return Cookies.set(refreshKey, refresh)
}
export function removeRefresh() {
return Cookies.remove(refreshKey)
}
// export function refreshToken() {
// let token = getToken()
// let data = {"token": token}
// return request({
// url: '/token/refresh/',
// method: 'post',
// data
// })
// }

View File

@ -73,7 +73,7 @@ service.interceptors.response.use(
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
store.dispatch('user/resetToken').then(() => { store.dispatch('user/logout').then(() => {
location.reload() location.reload()
}) })
}) })