Я новичок в Vue и изо всех сил пытаюсь обдумать, как реализовать то, что мне кажется хорошим примером для глобальной переменной или синглтона.
Фон в том, что яиспользование Azure AD B2C для проверки подлинности с помощью библиотеки MSAL.MSAL требует, чтобы один экземпляр Msal.UserAgentApplication
был объявлен и затем распространен через приложение.
Я борюсь с тем, как объявить этот экземпляр где-то центральным, а затем получить к нему доступ из каждого компонента, включая маршрутизатор..
На данный момент у меня есть класс, который похож на этот пример: https://github.com/sunilbandla/vue-msal-sample/blob/master/src/services/auth.service.js, и когда я хочу использовать методы, которые я делаю:
var authService = new AuthService();
authService.Login();
К сожалению, каждый раз при создании экземпляра класса создается новый экземпляр MSAL, что, в свою очередь, приводило к тому, что мои пользователи оказывались в цикле аутентификации.
Любая помощь будет принята с благодарностью.
Многиеспасибо.
Исходя из ответа Тедди, приведенного ниже, я изменил свой main.js
следующим образом:
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import './registerServiceWorker'
import AuthService from './services/AuthService';
Vue.config.productionTip = false
Vue.prototype.$authService = new AuthService();
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app');
И мой компонент register.vue следующим образом:
<template>
<div class="about">
<h1>This is the register page, it should redirect off to B2C</h1>
</div>
</template>
<script>
import router from '@/router.js'
export default {
created(){
this.$authService.isAuthenticated().then(
function(result){
if(result){
router.push('/');
}
else{
authService.register();
}
});
}
}
</script>
Компонент говорит, что this.$authService
не определено, поэтому он явно не читает прототип.
Такое ощущение, что на данный момент я упускаю что-то действительно фундаментальное в Vue.