UNPKG

@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
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