Commit a23c6244 by 展昭

update

parent a486fa34
Showing with 69 additions and 55 deletions
...@@ -4,14 +4,10 @@ import { vuexOidcCreateRouterMiddleware } from 'vuex-oidc' ...@@ -4,14 +4,10 @@ import { vuexOidcCreateRouterMiddleware } from 'vuex-oidc'
import store from '../store' import store from '../store'
import billRouters from './bill-router.js' import billRouters from './bill-router.js'
import moreRouters from './more-router.js' import moreRouters from './more-router.js'
import api from '../api/More'
import qs from "qs";
import axios from "axios";
const oidc_config = JSON.parse(process.env.VUE_APP_OIDC_CONFIG);
Vue.use(VueRouter) Vue.use(VueRouter)
const router = new VueRouter({ const router = new VueRouter({
mode: 'history', mode: 'history',
base: process.env.BASE_URL, base: process.env.BASE_URL,
...@@ -33,72 +29,90 @@ const router = new VueRouter({ ...@@ -33,72 +29,90 @@ const router = new VueRouter({
} }
}) })
function getAccessToken(authCode) { //自动登录
return new Promise((resolve, reject) => { function autoLogin(payload = { autoCode, redirectPath }) {
api.getAccessToken() store.dispatch("authenticateOidc", {
.then(res => { options: {
if (res && res.status) { extraQueryParams: {
accessToken = res.data.accessToken; authcode: payload.autoCode
resolve(accessToken); },
} redirectPath: payload.redirectPath
else { }
reject(res)
}
});
}); });
} }
async function getToken(access_token, appid, next) { const loginStorage = localStorage;
let pms = { const autoLoginParamsKey = "autoLoginParams";
client_id: oidc_config.client_id, function setAutoLogin(payload = { autoCode, redirectPath }) {
client_secret: oidc_config.client_secret, loginStorage.setItem(autoLoginParamsKey, JSON.stringify(payload))
grant_type: "application", }
scope: function getAutoLoginParams() {
"workapps.client openid api.workapps.user api.workapps.org api.workapps.open", const paramStr = loginStorage.getItem(autoLoginParamsKey);
app_register_id: appid, if (!!paramStr) {
token: access_token loginStorage.removeItem(autoLoginParamsKey);
}; return JSON.parse(paramStr);
let commonPms = GetCommonPms(); }
let url = `${oidc_config.authority}/connect/token?${commonPms}`; return null;
await axios
.post(url, qs.stringify(pms))
.then(
res => {
if (res.status == 200) {
const accessToken = res.data.access_token;
localStorage.setItem("token", accessToken);
next()
}
},
err => {
this.errMessage = err.response.data.error_description;
}
)
.catch(err => {
console.log("456err=", err);
});
} }
//如果有登录参数则优先登录
router.beforeEach((to, from, next) => {
const autoLoginParams = getAutoLoginParams();
if (autoLoginParams) {
autoLogin(autoLoginParams);
} else {
next();
}
})
router.beforeEach((to, from, next) => { router.beforeEach((to, from, next) => {
const authcode = to.query.authCode || to.query.authcode; const authcode = to.query.authCode || to.query.authcode;
const appid = to.query.appId || to.query.appid; const appid = to.query.appId || to.query.appid;
const userId = to.query.userid || to.query.userId||0;
if (!!authcode && !!appid) { if (!!authcode && !!appid) {
getAccessToken(authcode).then(res => { var toPath = to.path || "/";
const token = res; for (let key in to.query) {
getToken(token, appid, next); if (key == 'authcode'||key == 'authCode') {
}).catch(err => { continue;
console.log('err=', err); }
}) toPath += toPath.indexOf("?") > -1 ? "&" : "?";
toPath += `${key}=${to.query[key]}`;
}
const storeAppId = localStorage.getItem('appid');
store.dispatch("getOidcUser").then(oidcUser => {
if (oidcUser) {
if(storeAppId!= appid){
localStorage.setItem('appid',appid);
setAutoLogin({ autoCode: authcode, redirectPath: toPath })
store.dispatch("signOutOidc")
}else{
//如果登录用户与当前登录用户不匹配,则保存登录参数,退出
console.log('userId=',userId);
console.log('oidcUser.profile.sub=',oidcUser.profile.sub);
console.log('oidcUser.profile.sub==userId:',oidcUser.profile.sub==userId);
if (userId > 0 && oidcUser.profile.sub != userId) {
setAutoLogin({ autoCode: authcode, redirectPath: toPath })
store.dispatch("signOutOidc")
} else {
next()
}
}
} else {
localStorage.setItem('appid',appid);
autoLogin({ autoCode: authcode, redirectPath: toPath })
}
}).catch(() => {
localStorage.setItem('appid',appid);
autoLogin({ autoCode: authcode, redirectPath: toPath })
});
} else { } else {
next() next()
} }
}) })
router.beforeEach(vuexOidcCreateRouterMiddleware(store)); router.beforeEach(vuexOidcCreateRouterMiddleware(store));
export default router export default router
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment