Commit 857efe18 by 展昭

添加app_register_id逻辑

parent af8a8dd8
...@@ -56,7 +56,8 @@ const api = { ...@@ -56,7 +56,8 @@ const api = {
}; };
function defineHeader() { function defineHeader() {
const token = store.state.oidc.access_token; //const token = store.state.oidc.access_token;
const token=store.getters.getToken;
headers.Authorization = "Bearer " + token; headers.Authorization = "Bearer " + token;
return Promise.resolve(headers); return Promise.resolve(headers);
} }
......
/* eslint-disable */
import Oidc from "oidc-client";
import axios from "axios";
import qs from "qs";
import { GetCommonPms } from "../js/CommonPms.js";
import "babel-polyfill";
import store from "../../store";
const oidc_config = JSON.parse(process.env.VUE_APP_OIDC_CONFIG)
//console.log(oidc_config);
const mgr = new Oidc.UserManager({
userStore: new Oidc.WebStorageStateStore(),
authority: oidc_config.authority,
client_id: oidc_config.client_id,
redirect_uri: oidc_config.redirect_uri,
response_type: oidc_config.response_type,
scope: oidc_config.scope,
post_logout_redirect_uri: oidc_config.post_logout_redirect_uri,
silent_redirect_uri: oidc_config.silent_redirect_uri,
accessTokenExpiringNotificationTime: oidc_config.accessTokenExpiringNotificationTime,
automaticSilentRenew: oidc_config.automaticSilentRenew,
filterProtocolClaims: oidc_config.filterProtocolClaims,
loadUserInfo: oidc_config.loadUserInfo
});
Oidc.Log.logger = console;
Oidc.Log.level = Oidc.Log.WARN;
mgr.events.addUserLoaded(function(user) {
console.log("addUserLoaded");
let appid = localStorage.getItem("appid");
if (appid != "") {
let pms = {
client_id: oidc_config.client_id,
client_secret: oidc_config.client_secret,
grant_type: "application",
scope: "workapps.client openid api.workapps.user api.workapps.org api.workapps.open",
app_register_id: appid,
token: user.access_token
};
var commonPms = GetCommonPms();
axios.post(`${oidc_config.authority}/connect/token?${commonPms}`,qs.stringify(pms))
.then(res => {
if (res.status == 200) {
//localStorage.setItem("companyToken",res.data.access_token);
let accessToken = res.data.access_token;
store.dispatch("changeCompanyToken",accessToken);
}
});
}
});
mgr.events.addAccessTokenExpiring(function() {
//console.log("过期前");
console.log("AccessToken Expiring:", arguments);
});
mgr.events.addAccessTokenExpired(function() {
console.log("AccessToken Expired:", arguments);
mgr.signoutRedirect()
.then(function(resp) {
console.log("signed out", resp);
location.href="/";
})
.catch(function(err) {
console.log(err);
});
});
mgr.events.addSilentRenewError(function() {
console.error("Silent Renew Error:", arguments);
});
mgr.events.addUserSignedOut(function() {
console.log("UserSignedOut:", arguments);
mgr.signoutRedirect()
.then(function(resp) {
location.href="/";
})
.catch(function(err) {
console.log(err);
});
});
function getQueryString(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
export default class SecurityService {
signinRedirectCallback() {
mgr.signinRedirectCallback()
.then(function(user) {
console.log(user);
// window.location.href = '../';
})
.catch(function(err) {
console.log(err);
});
}
signinSilentCallback() {
mgr.signinSilentCallback().catch(function(err) {
console.log(err);
});
}
// Renew the token manually
renewToken() {
let self = this;
console.log("执行");
return new Promise((resolve, reject) => {
mgr.signinSilent()
.then(function(user) {
if (user == null) {
self.signIn(null);
} else {
return resolve(user);
}
})
.catch(function(err) {
alert(err);
console.log(err);
return reject(err);
});
});
}
// Get the user who is logged in
getUser() {
let self = this;
return new Promise((resolve, reject) => {
mgr.getUser()
.then(function(user) {
if (user == null) {
//self.signIn();
return resolve(null);
} else {
return resolve(user);
}
})
.catch(function(err) {
console.log(err);
return reject(err);
});
});
}
// Check if there is any user logged in
getSignedIn() {
let self = this;
return new Promise((resolve, reject) => {
mgr.getUser()
.then(function(user) {
// console.log("user=================>",user);
// let comid = getQueryString("comid");
// let authcode = getQueryString("authcode");
// //console.log(comid)
// localStorage.setItem("comid", comid == null ? "" : comid);
if (user == null) {
//console.log("=======>",comid,authcode);
// if (comid == null || authcode == null) {
// self.signIn();
// return resolve(false);
// } else {
// mgr.signinRedirect({
// extraQueryParams: {
// authcode: authcode
// }
// }).catch(function(err) {
// console.log(err);
// });
return resolve(false);
// }
} else {
//return resolve(false);
return resolve(true);
}
})
.catch(function(err) {
console.log(err);
return reject(err);
});
});
}
// Redirect of the current window to the authorization endpoint.
signIn(args = {}) {
mgr.signinRedirect(args).catch(function(err) {
console.log(err);
});
// this.tmxAutoLogin(args)
// console.log("_sigin==>", mgr._signin);
// console.log("login args ===============>",args);
}
tmxAutoLogin(args={}){
args = Object.assign({}, args);
args.request_type = "si:r";
let navParams = {
useReplaceToNavigate : args.useReplaceToNavigate
};
return mgr._signinStart(args, mgr._iframeNavigator, navParams).then(()=>{
Log.info("UserManager.signinRedirect: successful");
});
}
signOutPopup(){
return mgr.signoutPopup();
}
// Redirect of the current window to the end session endpoint
signOut() {
mgr.signoutRedirect()
.then(function(resp) {
console.log("signed out", resp);
//location.href="/";
})
.catch(function(err) {
console.log(err);
});
}
// Get the profile of the user logged in
getProfile() {
let self = this;
return new Promise((resolve, reject) => {
mgr.getUser()
.then(function(user) {
if (user == null) {
//self.signIn();
return resolve(null);
} else {
return resolve(user.profile);
}
})
.catch(function(err) {
console.log(err);
return reject(err);
});
});
}
// Get the token id
getIdToken() {
let self = this;
return new Promise((resolve, reject) => {
mgr.getUser()
.then(function(user) {
if (user == null) {
//self.signIn();
return resolve(null);
} else {
return resolve(user.id_token);
}
})
.catch(function(err) {
console.log(err);
return reject(err);
});
});
}
// Get the session state
getSessionState() {
let self = this;
return new Promise((resolve, reject) => {
mgr.getUser()
.then(function(user) {
if (user == null) {
//self.signIn();
return resolve(null);
} else {
return resolve(user.session_state);
}
})
.catch(function(err) {
console.log(err);
return reject(err);
});
});
}
// Get the access token of the logged in user
getAcessToken() {
let self = this;
return new Promise((resolve, reject) => {
mgr.getUser()
.then(function(user) {
if (user == null) {
//self.signIn();
return resolve(null);
} else {
return resolve(user.access_token);
}
})
.catch(function(err) {
console.log(err);
return reject(err);
});
});
}
// Takes the scopes of the logged in user
getScopes() {
let self = this;
return new Promise((resolve, reject) => {
mgr.getUser()
.then(function(user) {
if (user == null) {
//self.signIn();
return resolve(null);
} else {
return resolve(user.scopes);
}
})
.catch(function(err) {
console.log(err);
return reject(err);
});
});
}
// Get the user roles logged in
getRole() {
let self = this;
return new Promise((resolve, reject) => {
mgr.getUser()
.then(function(user) {
if (user == null) {
//self.signIn();
return resolve(null);
} else {
return resolve(user.profile.role);
}
})
.catch(function(err) {
console.log(err);
return reject(err);
});
});
}
}
...@@ -16,7 +16,7 @@ Vue.prototype.globalNavLeftArrowClick = function (callback) { ...@@ -16,7 +16,7 @@ Vue.prototype.globalNavLeftArrowClick = function (callback) {
new Vue({ new Vue({
router,
store, store,
router,
render: h => h(App) render: h => h(App)
}).$mount('#app') }).$mount('#app')
...@@ -4,7 +4,6 @@ import moreRouters from './more-router.js' ...@@ -4,7 +4,6 @@ import moreRouters from './more-router.js'
import billRouters from './bill-router.js' import billRouters from './bill-router.js'
import { vuexOidcCreateRouterMiddleware } from 'vuex-oidc' import { vuexOidcCreateRouterMiddleware } from 'vuex-oidc'
import store from '../store' import store from '../store'
import Mgr from "../assets/js/SecurityService"
Vue.use(VueRouter) Vue.use(VueRouter)
...@@ -30,58 +29,8 @@ const router = new VueRouter({ ...@@ -30,58 +29,8 @@ const router = new VueRouter({
} }
}) })
const mgr = new Mgr();
function loginByAuthcode(authCode) {
let loginArgs = { extraQueryParams: { authcode: authCode } };
mgr.signIn(loginArgs);
}
function autoLogin(comid, authcode, next) {
localStorage.setItem("comid", comid);
mgr.getUser().then(user => {
if (user == null) {
loginByAuthcode(authcode);
} else {
let companyId = localStorage.getItem("companyId");
if (comid != companyId) {
//如果已经登录,则先退出
localStorage.setItem("authcode", authcode);
mgr.signOut();
} else {
next();
}
}
})
}
router.beforeEach(vuexOidcCreateRouterMiddleware(store)); router.beforeEach(vuexOidcCreateRouterMiddleware(store));
// router.beforeEach((to, from, next) => { //TODO: 把callBack中的app_register_id逻辑替换到这里
// let authcode = localStorage.getItem("authcode")
// if (authcode) {
// localStorage.removeItem("authcode");
// loginByAuthcode(authcode)
// }
// else {
// authcode = to.query.authcode;
// const comid = to.query.comId || to.query.comid;
// if (comid && authcode) {
// localStorage.setItem("autoCallback", to.path);
// autoLogin(comid, authcode, next);
// } else {
// mgr.getUser().then(user => {
// if (user == null) {
// mgr.signIn();
// } else {
// next()
// }
// });
// }
// }
// });
export default router export default router
import types from "../types";
let usermemberId = '206484' let usermemberId = '206484'
let token = ''
const state = { usermemberId, token }
const getters = {
getToken(state) {
state.token = localStorage.getItem("token");
return state.token;
},
}
const state = { usermemberId } const mutations = {
[types.CHANGE_TOKEN](state, token) {
state.token = token;
try {
localStorage.setItem("token", token);
} catch (error) { }
},
}
const actions = {
changeToken({ commit }, token) {
commit(types.CHANGE_TOKEN, token);
}
}
export default { export default {
state state,
getters,
mutations,
actions
} }
\ No newline at end of file
...@@ -155,7 +155,7 @@ ...@@ -155,7 +155,7 @@
</template> </template>
<script> <script>
//TODO: 根据当前时间显示日期
import { Icon, Loading } from "vant"; import { Icon, Loading } from "vant";
import { TabHeader } from "@/components"; import { TabHeader } from "@/components";
import * as utils from "../../utils/common"; import * as utils from "../../utils/common";
......
...@@ -77,7 +77,6 @@ export default { ...@@ -77,7 +77,6 @@ export default {
pageSize: "10" pageSize: "10"
}).then( }).then(
resdata => { resdata => {
let arr = resdata.list; let arr = resdata.list;
// 如果是第一页需手动制空列表 // 如果是第一页需手动制空列表
if (page.num === 1) this.dataList = []; if (page.num === 1) this.dataList = [];
......
<template> <template>
<div> <div></div>
</div>
</template> </template>
<script> <script>
import { mapActions } from 'vuex' import { mapActions } from "vuex";
import { GetCommonPms } from "../assets/js/CommonPms.js";
import qs from "qs";
import axios from "axios";
import common from "../utils/common.js";
import store from "../store";
const oidc_config = JSON.parse(process.env.VUE_APP_OIDC_CONFIG);
export default { export default {
name: 'OidcCallback', name: "OidcCallback",
methods: { methods: {
...mapActions([ ...mapActions(["oidcSignInCallback", "getOidcUser"]),
'oidcSignInCallback' getQueryString(urlsearch, name) {
]) var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = urlsearch.match(reg);
if (r != null) return unescape(r[2]);
return null;
},
async getToken(access_token, appid, redirectPath) {
let pms = {
client_id: oidc_config.client_id,
client_secret: oidc_config.client_secret,
grant_type: "application",
scope:
"workapps.client openid api.workapps.user api.workapps.org api.workapps.open",
app_register_id: appid,
token: access_token
};
let commonPms = GetCommonPms();
let url = `${oidc_config.authority}/connect/token?${commonPms}`;
console.log("url=", url);
await axios
.post(url, qs.stringify(pms))
.then(
res => {
console.log("res=", res);
if (res.status == 200) {
const accessToken = res.data.access_token;
//store.dispatch("changeToken", accessToken);
localStorage.setItem("token", accessToken);
this.$router.push(redirectPath);
}
},
err => {
console.log("err=", err);
}
)
.catch(err => {
console.log("err=", err);
this.$router.push("/oidc-callback-error"); // Handle errors any way you want
});
}
}, },
mounted () { mounted() {
this.oidcSignInCallback() this.oidcSignInCallback()
.then((redirectPath) => { .then(redirectPath => {
this.$router.push(redirectPath) this.getOidcUser()
.then(res => {
let urlsearch = redirectPath.split("?")[1];
let appid = this.getQueryString(urlsearch, "appid");
console.log("appid=", appid);
this.getToken(res.access_token, appid, redirectPath);
}) })
.catch((err) => { .catch(err => {
console.error(err) console.log("err=", err);
this.$router.push('/oidc-callback-error') // Handle errors any way you want });
//this.$router.push(redirectPath);
}) })
.catch(err => {
console.error(err);
this.$router.push("/oidc-callback-error"); // Handle errors any way you want
});
} }
} };
</script> </script>
\ No newline at end of file
...@@ -9,13 +9,14 @@ ...@@ -9,13 +9,14 @@
<div v-else></div> <div v-else></div>
<div class="btn" @click="getOidcUserMy">getOidcUser</div> <div class="btn" @click="getOidcUserMy">getOidcUser</div>
<div class="btn" @click="authenticateOidcSilent">authenticateOidcSilent</div> <div class="btn" @click="authenticateOidcSilent">authenticateOidcSilent</div>
<div class="btn" @click="signOutOidc">signOut</div>
</div> </div>
</template> </template>
<script> <script>
import { TabHeader } from "@/components"; import { TabHeader } from "@/components";
import { mapGetters, mapActions } from "vuex"; import { mapGetters, mapActions } from "vuex";
import store from "@/store" import store from "@/store";
export default { export default {
components: { components: {
TabHeader TabHeader
...@@ -30,28 +31,37 @@ export default { ...@@ -30,28 +31,37 @@ export default {
"oidcIdTokenExp", "oidcIdTokenExp",
"oidcAuthenticationIsChecked", "oidcAuthenticationIsChecked",
"oidcError" "oidcError"
]), ])
hasAccess: function() { // hasAccess: function() {
return this.oidcIsAuthenticated || this.$route.meta.isPublic; // return this.oidcIsAuthenticated || this.$route.meta.isPublic;
} // }
},
mounted() {
this.oidcCheckAccess(this.$route).then(res => {
console.log("res=", res);
});
}, },
methods: { methods: {
...mapActions([ ...mapActions([
"oidcCheckAccess",
"authenticateOidc", // Authenticates with redirect to sign in if not signed in "authenticateOidc", // Authenticates with redirect to sign in if not signed in
"oidcSignInCallback", // Handles callback from authentication redirect. Has an optional url parameter "oidcSignInCallback", // Handles callback from authentication redirect. Has an optional url parameter
"authenticateOidcSilent", // Authenticates if signed in. No redirect is made if not signed in "authenticateOidcSilent", // Authenticates if signed in. No redirect is made if not signed in
"getOidcUser", // Get user from oidc-client storage and update it in vuex store. Returns a promise "getOidcUser", // Get user from oidc-client storage and update it in vuex store. Returns a promise
"signOutOidc", // Signs out user in open id provider "signOutOidc", // Signs out user in open id provider
"removeOidcUser" // Signs out user in vuex and browser storage, but not in open id provider "removeOidcUser", // Signs out user in vuex and browser storage, but not in open id provider
"addOidcEventListener"
]), ]),
getOidcUserMy() { getOidcUserMy() {
console.log('store=',store); this.getOidcUser()
this.getOidcUser().then(res => { .then(res => {
console.log("res=", JSON.stringify(res)); console.log("res=", JSON.stringify(res));
})
.catch(err => {
console.log("err=", err);
}); });
// const token=this.oidcAccessToken; // const token=this.oidcAccessToken;
// console.log('token=',token); // console.log('token=',token);
} }
}, },
data() { data() {
......
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