main.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import Keycloak from 'keycloak-js'
  2. import Vue from 'vue'
  3. import 'element-ui/lib/theme-chalk/index.css'
  4. import './scss/index.scss'
  5. import Element from 'element-ui'
  6. import App from './App'
  7. import store from './store'
  8. import router from './router'
  9. import './icons' // icon
  10. import './permission' // permission control
  11. import Permission from './components/Permission'
  12. import StatusWrapper from './components/StatusWrapper'
  13. import Pagination from './components/Pagination'
  14. import CTable from './components/CTable'
  15. import EditInput from './components/EditInput'
  16. import SearchInput from './components/SearchInput'
  17. import { showLoading, closeLoading } from './utils/pop'
  18. async function startApp () {
  19. console.log(keycloak)
  20. Vue.use(Element)
  21. Vue.component('Permission', Permission)
  22. Vue.component('StatusWrapper', StatusWrapper)
  23. Vue.component('Pagination', Pagination)
  24. Vue.component('CTable', CTable)
  25. Vue.component('EditInput', EditInput)
  26. Vue.component('SearchInput', SearchInput)
  27. Vue.prototype.$showLoading = showLoading
  28. Vue.prototype.$closeLoading = closeLoading
  29. Vue.config.productionTip = false
  30. Vue.config.errorHandler = (err, vm, info) => {
  31. closeLoading()
  32. throw err
  33. }
  34. Vue.prototype.$keycloak = keycloak
  35. await store.dispatch('user/login', keycloak.token)
  36. new Vue({
  37. router,
  38. store,
  39. render: h => h(App)
  40. }).$mount('#app')
  41. }
  42. const initOptions = {
  43. url: process.env.VUE_APP_KEYCLOAK_OPTIONS_URL,
  44. realm: process.env.VUE_APP_KEYCLOAK_OPTIONS_REALM,
  45. clientId: process.env.VUE_APP_KEYCLOAK_OPTIONS_CLIENTID,
  46. onLoad: process.env.VUE_APP_KEYCLOAK_OPTIONS_ONLOAD
  47. }
  48. const keycloak = Keycloak(initOptions)
  49. keycloak.init({ onLoad: initOptions.onLoad })
  50. .then(auth => {
  51. if (!auth) {
  52. console.error('Authenticated Failed[403]')
  53. return
  54. }
  55. // Token Refresh
  56. setInterval(() => {
  57. keycloak.updateToken(70).then(refreshed => {
  58. if (refreshed) {
  59. console.info('Token refreshed')
  60. store.dispatch('user/login', keycloak.token)
  61. } else {
  62. console.warn(`Token not refreshed, valid for ${Math.round(keycloak.tokenParsed.exp + keycloak.timeSkew - new Date().getTime() / 1000)} seconds`)
  63. }
  64. }).catch(() => {
  65. console.error('Failed to refresh token')
  66. })
  67. }, 6000)
  68. })
  69. .catch(() => {
  70. console.error('Authenticated Failed')
  71. })
  72. .finally(startApp)