@ecip/ecip-web
Version:
A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features
109 lines (101 loc) • 3.09 kB
JavaScript
import { getToken, setToken } from '@/utils/auth'
import store from '@/store'
import { whiteList } from '@/settings'
const _whiteList = whiteList || ['/login', '/auth-redirect', '/change-pwd'] // no redirect whitelist
/**
* 单点登录
*/
const baseUrl = process.env.NODE_ENV === 'development' || process.env.NODE_ENV === 'staging' ? '' : process.env.VUE_APP_BASE_API
const init = (callback) => {
console.log('-------单点登录开始-------')
const token = getToken()
const st = getUrlParam('ticket').split('#/')[0]
const appId = window._CONFIG['appId']
var service = window.location.protocol + '//' + window.location.host + baseUrl + '?appId=' + appId + location.hash
// var service = window.location.protocol + '//' + window.location.host + baseUrl + '?appId=' + appId
if (location.hash) {
const hash = location.hash.split('#')[1]
for (let i = 0; i < _whiteList.length; i++) {
if (hash.startsWith(_whiteList[i])) {
loginSuccess(callback)
return
}
}
}
if (token) {
store.dispatch('user/validateToken', { token, appId }).then(res => {
if (res.success && res.data) {
loginSuccess(callback)
} else {
if (st) {
validateSt(st, service, callback)
} else {
var serviceUrl = encodeURIComponent(service)
window.location.href = window._CONFIG['casPrefixUrl'] + '/login?service=' + serviceUrl
}
}
}).catch((err) => {
console.log(err)
loginSuccess(callback)
// that.requestFailed(err);
})
} else {
if (st) {
validateSt(st, service, callback)
} else {
var serviceUrl = encodeURIComponent(service)
window.location.href = window._CONFIG['casPrefixUrl'] + '/login?service=' + serviceUrl
}
}
console.log('-------单点登录结束-------')
}
const SSO = {
init: init
}
function getUrlParam(paraName) {
var url = document.location.toString()
var arrObj = url.split('?')
if (arrObj.length > 1) {
var arrPara = arrObj[1].split('&')
var arr
for (var i = 0; i < arrPara.length; i++) {
arr = arrPara[i].split('=')
if (arr != null && arr[0] === paraName) {
return arr[1]
}
}
return ''
} else {
return ''
}
}
function validateSt(ticket, service, callback) {
const params = {
ticket: ticket,
service: service
}
store.dispatch('user/validateCasLogin', params).then(res => {
// this.departConfirm(res)
if (res.success) {
const { data } = res
setToken(data.token)
store.commit('user/SET_TOKEN', data.token)
// 去掉url的ticket
// window.location.href = ''
// setTimeout(() => {
// window.location.href = ''
// }, 500)
loginSuccess(callback)
} else {
const serviceUrl = encodeURIComponent(service)
window.location.href = window._CONFIG['casPrefixUrl'] + '/login?service=' + serviceUrl
}
}).catch((err) => {
console.log(err)
// that.requestFailed(err);
})
}
function loginSuccess(callback) {
callback()
}
export default SSO