单点登录bug修复

This commit is contained in:
wuhongjian 2022-07-08 19:02:20 +08:00
parent 678367a6bf
commit a839c90a1e
4 changed files with 273 additions and 290 deletions

View File

@ -28,10 +28,10 @@
<!-- 站点配置 -->
<script>
window.SITE_CONFIG = {};
// window.SITE_CONFIG['backUrl'] = 'http://15.72.183.90:8001';
// window.SITE_CONFIG['previewUrl'] = 'http://15.72.183.90:7008/';
// window.SITE_CONFIG['frontUrl'] = 'http://15.72.183.90:7008/document/#/devModelFile/';
// window.SITE_CONFIG['apiURL'] = 'http://15.72.183.90:8000/renren-admin';
window.SITE_CONFIG['backUrl'] = 'http://15.72.183.90:8001';
window.SITE_CONFIG['previewUrl'] = 'http://15.72.183.90:7008/';
window.SITE_CONFIG['frontUrl'] = 'http://15.72.183.90:7008/document/#/devModelFile/';
window.SITE_CONFIG['apiURL'] = 'http://15.72.183.90:8000/renren-admin';
window.SITE_CONFIG['POI_URL'] = 'http://15.72.178.129:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address';
// 包头
// window.SITE_CONFIG['backUrl'] = 'http://10.110.205.1:8001';
@ -45,10 +45,10 @@
// window.SITE_CONFIG['frontUrl'] = 'http://10.134.135.9:9796/document/#/devModelFile/';
// window.SITE_CONFIG['apiURL'] = 'http://10.134.135.9:8888/renren-admin';
// 开发
window.SITE_CONFIG['backUrl'] = 'http://15.2.21.238:9797';
window.SITE_CONFIG['previewUrl'] = 'http://15.2.21.238:9796/';
window.SITE_CONFIG['frontUrl'] = 'http://15.2.21.238:9796/document/#/devModelFile/';
window.SITE_CONFIG['apiURL'] = 'http://15.2.21.238:8888/renren-admin';
// window.SITE_CONFIG['backUrl'] = 'http://15.2.21.238:9797';
// window.SITE_CONFIG['previewUrl'] = 'http://15.2.21.238:9796/';
// window.SITE_CONFIG['frontUrl'] = 'http://15.2.21.238:9796/document/#/devModelFile/';
// window.SITE_CONFIG['apiURL'] = 'http://15.2.21.238:8888/renren-admin';
// window.SITE_CONFIG['POI_URL'] = 'http://15.72.178.129:8090/iserver/services/addressmatch-qingdaoPOI181015/restjsr/v1/address';
// 穿透版本
// window.SITE_CONFIG['backUrl'] = 'http://124.222.94.39:9797';

View File

@ -2,175 +2,182 @@
* @author chuzhixin 1204505056@qq.com
* @description 登录获取用户信息退出登录清除accessToken逻辑不建议修改
*/
import { getUserInfo, login, logout } from '@/api/user'
import {
getAccessToken,
removeAccessToken,
setAccessToken,
} from '@/utils/accessToken'
import { title, tokenName } from '@/config'
import { message, notification } from 'ant-design-vue'
import { getUserInfo, login, logout } from '@/api/user'
import {
getAccessToken,
removeAccessToken,
setAccessToken,
} from '@/utils/accessToken'
import { title, tokenName } from '@/config'
import { message, notification } from 'ant-design-vue'
const state = () => ({
accessToken: getAccessToken(),
username: '',
userId: '',
avatar: '',
role: 0, //
})
const getters = {
accessToken: (state) => state.accessToken,
username: (state) => state.username,
avatar: (state) => state.avatar,
role: (state) => state.role,
userId: (state) => state.userId,
}
const mutations = {
/**
* @author chuzhixin 1204505056@qq.com
* @description 设置accessToken
* @param {*} state
* @param {*} accessToken
*/
setAccessToken(state, accessToken) {
state.accessToken = accessToken
setAccessToken(accessToken)
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 设置用户名
* @param {*} state
* @param {*} username
*/
setUsername(state, username) {
state.username = username
},
//
setRole(state, role) {
state.role = role
},
// userId
setUserId(state, id) {
state.userId = id
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 设置头像
* @param {*} state
* @param {*} avatar
*/
setAvatar(state, avatar) {
state.avatar = avatar
},
}
const actions = {
/**
* @author chuzhixin 1204505056@qq.com
* @description 登录拦截放行时设置虚拟角色
* @param {*} { commit, dispatch }
*/
setVirtualRoles({ commit, dispatch }) {
dispatch('acl/setFull', true, {
root: true,
})
commit('setAvatar', 'https://i.gtimg.cn/club/item/face/img/2/15922_100.gif')
commit('setUsername', 'admin(未开启登录拦截)')
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 登录
* @param {*} { commit }
* @param {*} userInfo
*/
async login({ commit }, userInfo) {
const { data } = await login(userInfo)
// debugger
const accessToken = data.data[tokenName]
if (accessToken) {
commit('setAccessToken', accessToken)
const hour = new Date().getHours()
const thisTime =
hour < 8
? '早上好'
: hour <= 11
? '上午好'
: hour <= 13
? '中午好'
: hour < 18
? '下午好'
: '晚上好'
notification.open({
message: `欢迎登录${title}`,
description: `${thisTime}`,
})
} else {
message.error(`登录接口异常,未正确返回${tokenName}...`)
}
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 获取用户信息接口 这个接口非常非常重要如果没有明确底层前逻辑禁止修改此方法错误的修改可能造成整个框架无法正常使用
* @param {*} { commit, dispatch, state }
* @returns
*/
getUserInfo({ commit }) {
return new Promise((resolve, reject)=>{
getUserInfo().then( (res) =>{
console.log('res', res)
const data = res.data
if (!data) {
message.error(`验证失败,请重新登录...`)
reject()
}
commit('setUsername', data.data.username)
commit('setRole', data.data.roleIdList.length)
commit('setUserId', data.data.id)
setTimeout(()=>{
resolve()
},500)
const state = () => ({
accessToken: getAccessToken(),
username: '',
userId: '',
avatar: '',
role: 0, //
})
const getters = {
accessToken: (state) => state.accessToken,
username: (state) => state.username,
avatar: (state) => state.avatar,
role: (state) => state.role,
userId: (state) => state.userId,
}
const mutations = {
/**
* @author chuzhixin 1204505056@qq.com
* @description 设置accessToken
* @param {*} state
* @param {*} accessToken
*/
setAccessToken(state, accessToken) {
state.accessToken = accessToken
setAccessToken(accessToken)
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 设置用户名
* @param {*} state
* @param {*} username
*/
setUsername(state, username) {
state.username = username
},
//
setRole(state, role) {
state.role = role
},
// userId
setUserId(state, id) {
state.userId = id
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 设置头像
* @param {*} state
* @param {*} avatar
*/
setAvatar(state, avatar) {
state.avatar = avatar
},
}
const actions = {
/**
* @author chuzhixin 1204505056@qq.com
* @description 登录拦截放行时设置虚拟角色
* @param {*} { commit, dispatch }
*/
setVirtualRoles({ commit, dispatch }) {
dispatch('acl/setFull', true, {
root: true,
})
commit('setAvatar', 'https://i.gtimg.cn/club/item/face/img/2/15922_100.gif')
commit('setUsername', 'admin(未开启登录拦截)')
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 登录
* @param {*} { commit }
* @param {*} userInfo
*/
async login({ commit }, userInfo) {
const { data } = await login(userInfo)
// debugger
const accessToken = data.data[tokenName]
if (accessToken) {
commit('setAccessToken', accessToken)
const hour = new Date().getHours()
const thisTime =
hour < 8
? '早上好'
: hour <= 11
? '上午好'
: hour <= 13
? '中午好'
: hour < 18
? '下午好'
: '晚上好'
notification.open({
message: `欢迎登录${title}`,
description: `${thisTime}`,
})
} else {
message.error(`登录接口异常,未正确返回${tokenName}...`)
}
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 获取用户信息接口 这个接口非常非常重要如果没有明确底层前逻辑禁止修改此方法错误的修改可能造成整个框架无法正常使用
* @param {*} { commit, dispatch, state }
* @returns
*/
async getUserInfo({ commit }) {
const { data } = await getUserInfo()
if (!data) {
message.error(`验证失败,请重新登录...`)
return false
}
// debugger
commit('setUsername', data.data.username)
commit('setRole', data.data.roleIdList.length)
commit('setUserId', data.data.id)
// TODO
// let { username, avatar, roles, ability } = data
// if (username && roles && Array.isArray(roles)) {
// dispatch('acl/setRole', roles, {
// root: true,
// })
// if (ability && ability.length > 0)
// dispatch('acl/setAbility', ability, {
// root: true,
// })
// commit('setUsername', username)
// commit('setAvatar', avatar)
// } else {
// message.error('')
// }
},
})
})
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 退出登录
* @param {*} { dispatch }
*/
async logout({ dispatch }) {
await logout(state.accessToken)
await dispatch('resetAll')
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 重置accessTokenrolesabilityrouter等
* @param {*} { commit, dispatch }
*/
async resetAll({ dispatch }) {
await dispatch('setAccessToken', '')
await dispatch('acl/setFull', false, {
root: true,
})
await dispatch('acl/setRole', [], {
root: true,
})
await dispatch('acl/setAbility', [], {
root: true,
})
removeAccessToken()
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 设置token
*/
setAccessToken({ commit }, accessToken) {
commit('setAccessToken', accessToken)
},
}
export default {
state,
getters,
mutations,
actions,
}
/**
* @author chuzhixin 1204505056@qq.com
* @description 退出登录
* @param {*} { dispatch }
*/
async logout({ dispatch }) {
await logout(state.accessToken)
await dispatch('resetAll')
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 重置accessTokenrolesabilityrouter等
* @param {*} { commit, dispatch }
*/
async resetAll({ dispatch }) {
await dispatch('setAccessToken', '')
await dispatch('acl/setFull', false, {
root: true,
})
await dispatch('acl/setRole', [], {
root: true,
})
await dispatch('acl/setAbility', [], {
root: true,
})
removeAccessToken()
},
/**
* @author chuzhixin 1204505056@qq.com
* @description 设置token
*/
setAccessToken({ commit }, accessToken) {
commit('setAccessToken', accessToken)
},
}
export default {
state,
getters,
mutations,
actions,
}

View File

@ -12,7 +12,7 @@ import qs from 'qs'
import router from '@/router'
// import { isArray } from '@/utils/validate'
import { message } from 'ant-design-vue'
import { setAccessToken } from '@/utils/accessToken'
import { getAccessToken, setAccessToken } from '@/utils/accessToken'
let loadingInstance
@ -22,15 +22,24 @@ let loadingInstance
* @param {*} code
* @param {*} msg
*/
const handleCode = (code, msg, redirect) => {
const handleCode = (code, msg, res) => {
debugger
switch (code) {
case 401:
// message.error(msg || '')
store.dispatch('user/resetAll').catch(() => {})
// // location.reload()
if (redirect) {
window.location.href = redirect
if (res.token) {
console.log('存在token信息', res.token)
setAccessToken(res.token)
const token = getAccessToken()
console.log('验证token信息', token)
}
// // location.reload()
// if (redirect) {
// window.location.href = res.redirect
// }
break
case 403:
router.push({ path: '/401' }).catch(() => {})
@ -87,10 +96,21 @@ instance.interceptors.request.use(
*/
instance.interceptors.response.use(
(response) => {
// console.log('', response)
// console.log('headers', response.headers)
// console.log('REDIRECT', response.headers.redirect)
console.log('接口返回', response)
console.log('接口返回headers', response.headers)
console.log('接口返回REDIRECT', response.headers.redirect)
response['Access-Control-Expose-Headers'] = 'redirect'
const { code, message } = response.data
if (response.headers.token) {
setAccessToken(response.headers.token)
} else {
if (response.headers.redirect) {
// window.location.href = response.headers.redirect
window.location.replace(response.headers.redirect)
return
// location.reload()
}
}
if (response.headers.redirect === '/#/login') {
var keys = document.cookie.match(/[^ =;]+(?=\=)/g)
if (keys) {
@ -109,29 +129,12 @@ instance.interceptors.response.use(
new Date(0).toUTCString() // .kevis.com
}
}
// console.log('')
console.log('已清除')
setTimeout(() => {
location.reload()
}, 1000)
}
debugger;
response['Access-Control-Expose-Headers'] = 'redirect'
const { code, message } = response.data
if (response.headers.token) {
setAccessToken(response.headers.token)
debugger
// setAccessToken(response.headers.token)
// store.dispatch('user/getUserInfo')
} else {
if (response.headers.redirect) {
// window.location.href = response.headers.redirect
window.location.replace(response.headers.redirect)
return
// location.reload()
}
}
handleCode(code, message, response.headers.redirect)
handleCode(code, message, response.headers)
if (loadingInstance) loadingInstance.close()
// const { data, config } = response
// const { code, msg } = data
@ -151,38 +154,15 @@ instance.interceptors.response.use(
// }
},
(error) => {
// console.log('error', error)
console.log('接口error', error)
if (loadingInstance) loadingInstance.close()
const { response, message } = error
if (error.response && error.response.data) {
// console.log('', response)
// console.log('headers', response.headers)
// console.log('REDIRECT1111', response.headers.redirect)
if (response.headers.redirect === '/#/login') {
var keys = document.cookie.match(/[^ =;]+(?=\=)/g)
if (keys) {
for (var i = keys.length; i--; ) {
document.cookie =
keys[i] + '=0;path=/;expires=' + new Date(0).toUTCString() //,m.kevis.com
document.cookie =
keys[i] +
'=0;path=/;domain=' +
document.domain +
';expires=' +
new Date(0).toUTCString() // .m.kevis.com
document.cookie =
keys[i] +
'=0;path=/;domain=kevis.com;expires=' +
new Date(0).toUTCString() // .kevis.com
}
}
// console.log('')
setTimeout(() => {
location.reload()
}, 1000)
}
console.log('接口返回', response)
console.log('接口返回headers', response.headers)
console.log('接口返回REDIRECT', response.headers.redirect)
if (response.headers.redirect) {
window.location.href = response.headers.redirect
window.location.replace(response.headers.redirect)
return Promise.reject(error)
}
const { status, data } = response

View File

@ -2,67 +2,63 @@
* @Author: hisense.wuhongjian
* @Date: 2022-04-01 17:23:11
* @LastEditors: hisense.wuhongjian
* @LastEditTime: 2022-07-07 19:58:32
* @LastEditTime: 2022-07-08 18:55:28
* @Description: 告诉大家这是什么
*/
/**
* @author chuzhixin 1204505056@qq.com
* @description 路由守卫目前两种模式all模式与intelligence模式
*/
import router from '@/router'
import store from '@/store'
import getPageTitle from '@/utils/pageTitle'
import {
// authentication,
loginInterception,
// recordRoute,
routesWhiteList,
} from '@/config'
import { setAccessToken, getAccessToken } from '@/utils/accessToken'
router.beforeEach(async (to, from, next) => {
//
// debugger
// const SSOTOKEN = to.query.SSOToken
// if (SSOTOKEN) {
// setAccessToken(SSOTOKEN)
// }
const token = getAccessToken()
// console.log('token', token)
let hasToken = token || store.getters['user/accessToken']
// debugger
//
if (!loginInterception) hasToken = true
// console.log('hasToken', hasToken)
debugger
if (hasToken) {
setAccessToken(token)
await store.dispatch('user/getUserInfo')
debugger
next()
} else {
let accessRoutes = []
accessRoutes = await store.dispatch('routes/setRoutes')
accessRoutes.forEach((item) => {
router.addRoute(item)
})
if (routesWhiteList.indexOf(to.path) !== -1) {
next()
} else {
store.dispatch('user/getUserInfo').then((res)=>{
console.log('马到成功!')
next()
import router from '@/router'
import store from '@/store'
import getPageTitle from '@/utils/pageTitle'
import { getUserInfo } from '@/api/user'
import {
// authentication,
loginInterception,
// recordRoute,
routesWhiteList,
} from '@/config'
import { setAccessToken, getAccessToken } from '@/utils/accessToken'
router.beforeEach(async (to, from, next) => {
// debugger
// const SSOTOKEN = to.query.SSOToken
// if (SSOTOKEN) {
// setAccessToken(SSOTOKEN)
// }
const token = getAccessToken()
console.log('token', token)
let hasToken = token || store.getters['user/accessToken']
// debugger
if (!loginInterception) hasToken = true
console.log('hasToken存在巨大问题', hasToken)
if (hasToken) {
setAccessToken(hasToken)
await store.dispatch('user/getUserInfo')
next()
} else {
let accessRoutes = []
accessRoutes = await store.dispatch('routes/setRoutes')
accessRoutes.forEach((item) => {
router.addRoute(item)
})
if (routesWhiteList.indexOf(to.path) !== -1) {
next()
} else {
getUserInfo().then(res=>{
console.log(res)
router.replace('/home')
})
// if (recordRoute)
// next({ path: '/login', query: { redirect: to.path }, replace: true })
// else next({ path: '/login', replace: true })
// debugger
// setTimeout(()=>{
// await store.dispatch('user/getUserInfo')
// next()
// }, 500)
// window.open('http://www.baidu.com', '_self')
}
}
})
router.afterEach((to) => {
document.title = getPageTitle(to.meta.title)
})
// if (recordRoute)
// next({ path: '/login', query: { redirect: to.path }, replace: true })
// else next({ path: '/login', replace: true })
// next()
// window.open('http://www.baidu.com', '_self')
}
}
})
router.afterEach((to) => {
document.title = getPageTitle(to.meta.title)
})