fix refresh token

pull/59/head
smallwei 7 years ago
parent 503bcf436a
commit d14be8abff
  1. 2
      src/api/user.js
  2. 2
      src/config/website.js
  3. 134
      src/page/index/index.vue
  4. 50
      src/store/modules/user.js

@ -1,5 +1,5 @@
import request from '@/router/axios'; import request from '@/router/axios';
import {baseUrl} from '@/config/env'; import { baseUrl } from '@/config/env';
export const loginByUsername = (tenantCode, username, password, type) => request({ export const loginByUsername = (tenantCode, username, password, type) => request({
url: '/api/blade-auth/oauth/token', url: '/api/blade-auth/oauth/token',

@ -10,7 +10,7 @@ export default {
clientSecret: 'saber_secret', // 客户端密钥 clientSecret: 'saber_secret', // 客户端密钥
tenantMode: true, // 是否开启租户模式 tenantMode: true, // 是否开启租户模式
lockPage: '/lock', lockPage: '/lock',
tokenTime: 1500, tokenTime: 7200,
//http的status默认放行不才用统一处理的, //http的status默认放行不才用统一处理的,
statusWhiteList: [], statusWhiteList: [],
//配置首页不可关闭 //配置首页不可关闭

@ -3,25 +3,25 @@
:class="{'avue--collapse':isCollapse}"> :class="{'avue--collapse':isCollapse}">
<div class="avue-header"> <div class="avue-header">
<!-- 顶部导航栏 --> <!-- 顶部导航栏 -->
<top/> <top />
</div> </div>
<div class="avue-layout"> <div class="avue-layout">
<div class="avue-left"> <div class="avue-left">
<!-- 左侧导航栏 --> <!-- 左侧导航栏 -->
<sidebar/> <sidebar />
</div> </div>
<div class="avue-main"> <div class="avue-main">
<!-- 顶部标签卡 --> <!-- 顶部标签卡 -->
<tags/> <tags />
<!-- 主体视图层 --> <!-- 主体视图层 -->
<el-scrollbar style="height:100%"> <el-scrollbar style="height:100%">
<keep-alive> <keep-alive>
<router-view class="avue-view" <router-view class="avue-view"
v-if="$route.meta.keepAlive"/> v-if="$route.meta.keepAlive" />
</keep-alive> </keep-alive>
<router-view class="avue-view" <router-view class="avue-view"
v-if="!$route.meta.keepAlive"/> v-if="!$route.meta.keepAlive" />
</el-scrollbar> </el-scrollbar>
</div> </div>
@ -38,69 +38,73 @@
</template> </template>
<script> <script>
import {mapGetters} from "vuex"; import { mapGetters } from "vuex";
import tags from "./tags"; import tags from "./tags";
import top from "./top/"; import top from "./top/";
import sidebar from "./sidebar/"; import sidebar from "./sidebar/";
import admin from "@/util/admin"; import admin from "@/util/admin";
// import { validatenull } from "@/util/validate"; import { validatenull } from "@/util/validate";
// import { calcDate } from "@/util/date.js"; import { calcDate } from "@/util/date.js";
// import { getStore } from "@/util/store.js"; import { getStore } from "@/util/store.js";
export default { export default {
components: { components: {
top, top,
tags, tags,
sidebar sidebar
},
name: "index",
data() {
return {
//token
refreshLock: false,
//token
refreshTime: ""
};
},
created() {
//token
this.refreshToken();
},
mounted() {
this.init();
},
computed: mapGetters(["isLock", "isCollapse", "website"]),
props: [],
methods: {
showCollapse() {
this.$store.commit("SET_COLLAPSE");
}, },
name: "index", //
data() { init() {
return { this.$store.commit("SET_SCREEN", admin.getScreen());
//token window.onresize = () => {
refreshLock: false, setTimeout(() => {
//token this.$store.commit("SET_SCREEN", admin.getScreen());
refreshTime: "" }, 0);
}; };
this.$store.dispatch("FlowRoutes").then(() => {});
}, },
created() { refreshToken() {
//token this.refreshTime = setInterval(() => {
this.refreshToken(); const token = getStore({
}, name: "token",
mounted() { debug: true
this.init();
},
computed: mapGetters(["isLock", "isCollapse", "website"]),
props: [],
methods: {
showCollapse() {
this.$store.commit("SET_COLLAPSE");
},
//
init() {
this.$store.commit("SET_SCREEN", admin.getScreen());
window.onresize = () => {
setTimeout(() => {
this.$store.commit("SET_SCREEN", admin.getScreen());
}, 0);
};
this.$store.dispatch("FlowRoutes").then(() => {
}); });
}, const date = calcDate(token.datetime, new Date().getTime());
// token if (validatenull(date)) return;
refreshToken() { if (date.seconds >= this.website.tokenTime && !this.refreshLock) {
/*this.refreshTime = setInterval(() => { this.refreshLock = true;
if (!this.refreshLock) { this.$store
this.refreshLock = true; .dispatch("RefeshToken")
this.$store .then(() => {
.dispatch("RefeshToken") this.refreshLock = false;
.then(() => { })
this.refreshLock = false; .catch(() => {
}) this.refreshLock = false;
.catch(() => { });
this.refreshLock = false; }
}); }, 1000);
}
}, this.website.tokenTime * 1000);*/
}
} }
}; }
};
</script> </script>

@ -1,10 +1,10 @@
import {setToken, setRefreshToken, removeToken} from '@/util/auth' import { setToken, setRefreshToken, removeToken } from '@/util/auth'
import {Message} from 'element-ui' import { Message } from 'element-ui'
import {setStore, getStore} from '@/util/store' import { setStore, getStore } from '@/util/store'
import {isURL, validatenull} from '@/util/validate' import { isURL, validatenull } from '@/util/validate'
import {deepClone} from '@/util/util' import { deepClone } from '@/util/util'
import webiste from '@/config/website' import webiste from '@/config/website'
import {loginByUsername, getUserInfo, getMenu, getTopMenu, logout, refeshToken, getButtons} from '@/api/user' import { loginByUsername, getUserInfo, getMenu, getTopMenu, logout, refeshToken, getButtons } from '@/api/user'
function addPath(ele, first) { function addPath(ele, first) {
@ -32,17 +32,17 @@ function addPath(ele, first) {
const user = { const user = {
state: { state: {
userInfo: getStore({name: 'userInfo'}) || [], userInfo: getStore({ name: 'userInfo' }) || [],
permission: getStore({name: 'permission'}) || {}, permission: getStore({ name: 'permission' }) || {},
roles: [], roles: [],
menu: getStore({name: 'menu'}) || [], menu: getStore({ name: 'menu' }) || [],
menuAll: [], menuAll: [],
token: getStore({name: 'token'}) || '', token: getStore({ name: 'token' }) || '',
refreshToken: getStore({name: 'refreshToken'}) || '', refreshToken: getStore({ name: 'refreshToken' }) || '',
}, },
actions: { actions: {
//根据用户名登录 //根据用户名登录
LoginByUsername({commit}, userInfo) { LoginByUsername({ commit }, userInfo) {
return new Promise((resolve) => { return new Promise((resolve) => {
loginByUsername(userInfo.tenantCode, userInfo.username, userInfo.password, userInfo.type).then(res => { loginByUsername(userInfo.tenantCode, userInfo.username, userInfo.password, userInfo.type).then(res => {
const data = res.data; const data = res.data;
@ -62,7 +62,7 @@ const user = {
}) })
}) })
}, },
GetButtons({commit}) { GetButtons({ commit }) {
return new Promise((resolve) => { return new Promise((resolve) => {
getButtons().then(res => { getButtons().then(res => {
const data = res.data.data; const data = res.data.data;
@ -72,7 +72,7 @@ const user = {
}) })
}, },
//根据手机号登录 //根据手机号登录
LoginByPhone({commit}, userInfo) { LoginByPhone({ commit }, userInfo) {
return new Promise((resolve) => { return new Promise((resolve) => {
loginByUsername(userInfo.phone, userInfo.code).then(res => { loginByUsername(userInfo.phone, userInfo.code).then(res => {
const data = res.data.data; const data = res.data.data;
@ -83,7 +83,7 @@ const user = {
}) })
}) })
}, },
GetUserInfo({commit}) { GetUserInfo({ commit }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
getUserInfo().then((res) => { getUserInfo().then((res) => {
const data = res.data.data; const data = res.data.data;
@ -95,9 +95,9 @@ const user = {
}) })
}, },
//刷新token //刷新token
RefeshToken({state, commit}) { RefeshToken({ state, commit }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
refeshToken(state.refreshToken).then(res => { refeshToken(state.refreshToken, state.userInfo).then(res => {
const data = res.data; const data = res.data;
commit('SET_TOKEN', data.access_token); commit('SET_TOKEN', data.access_token);
commit('SET_REFRESH_TOKEN', data.refresh_token); commit('SET_REFRESH_TOKEN', data.refresh_token);
@ -108,7 +108,7 @@ const user = {
}) })
}, },
// 登出 // 登出
LogOut({commit}) { LogOut({ commit }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
logout().then(() => { logout().then(() => {
commit('SET_TOKEN', '') commit('SET_TOKEN', '')
@ -124,7 +124,7 @@ const user = {
}) })
}, },
//注销session //注销session
FedLogOut({commit}) { FedLogOut({ commit }) {
return new Promise(resolve => { return new Promise(resolve => {
commit('SET_TOKEN', '') commit('SET_TOKEN', '')
commit('SET_MENU', []) commit('SET_MENU', [])
@ -144,7 +144,7 @@ const user = {
}) })
}, },
//获取系统菜单 //获取系统菜单
GetMenu({commit, dispatch}, parentId) { GetMenu({ commit, dispatch }, parentId) {
return new Promise(resolve => { return new Promise(resolve => {
getMenu(parentId).then((res) => { getMenu(parentId).then((res) => {
const data = res.data.data const data = res.data.data
@ -163,20 +163,20 @@ const user = {
SET_TOKEN: (state, token) => { SET_TOKEN: (state, token) => {
setToken(token) setToken(token)
state.token = token; state.token = token;
setStore({name: 'token', content: state.token, type: 'session'}) setStore({ name: 'token', content: state.token, type: 'session' })
}, },
SET_REFRESH_TOKEN: (state, refreshToken) => { SET_REFRESH_TOKEN: (state, refreshToken) => {
setRefreshToken(refreshToken) setRefreshToken(refreshToken)
state.refreshToken = refreshToken; state.refreshToken = refreshToken;
setStore({name: 'refreshToken', content: state.refreshToken, type: 'session'}) setStore({ name: 'refreshToken', content: state.refreshToken, type: 'session' })
}, },
SET_USERIFNO: (state, userInfo) => { SET_USERIFNO: (state, userInfo) => {
state.userInfo = userInfo; state.userInfo = userInfo;
setStore({name: 'userInfo', content: state.userInfo}) setStore({ name: 'userInfo', content: state.userInfo })
}, },
SET_MENU: (state, menu) => { SET_MENU: (state, menu) => {
state.menu = menu state.menu = menu
setStore({name: 'menu', content: state.menu, type: 'session'}) setStore({ name: 'menu', content: state.menu, type: 'session' })
}, },
SET_MENU_ALL: (state, menuAll) => { SET_MENU_ALL: (state, menuAll) => {
state.menuAll = menuAll; state.menuAll = menuAll;
@ -207,7 +207,7 @@ const user = {
result.forEach(ele => { result.forEach(ele => {
state.permission[ele] = true; state.permission[ele] = true;
}); });
setStore({name: 'permission', content: state.permission, type: 'session'}) setStore({ name: 'permission', content: state.permission, type: 'session' })
} }
} }

Loading…
Cancel
Save