Я аутентифицирую пользователя с помощью Amazon Cognito в приложении Vue.js со следующим кодом:
export default new Vue({
mounted() {
store.dispatch('authenticateUser', { email: 'username', password: 'password' }).then(() => {
if (store.state.cognito.authenticated) {
// Add authentication token to each request
axios.interceptors.request.use(async config => {
const response = await store.dispatch('getUserSession');
if (response && response.accessToken && response.accessToken.jwtToken) {
config.headers.AccessToken = response.accessToken.jwtToken;
}
return config;
});
} else {
this.flashError('AWS user is not authenticated.');
}
}).catch((err) => {
this.flashError(`AWS authentication error: ${err.message}`);
});
},
}).$mount('#app');
Сначала я запускаю асинхронное authenticateUser действие и когдавсе готово Я настроил axios таким образом, что все запросы axios автоматически отправляют информацию аутентификации на сервер.
Единственное, что я еще не выяснилзаключается в том, как заставить все запросы axios в приложении ожидать завершения асинхронной аутентификации.(Например, главная страница приложения может запускать axios запрос на заполнение своих данных, когда асинхронная аутентификация все еще выполняется, поэтому должен быть какой-то механизм, который заставит ее ждать).
InВ других языках (например, C ++ или C #) есть две альтернативы: 1. заблокировать приложение в mount () до завершения аутентификации.2. заставьте все запросы ждать события завершения.
как насчет JavaScript?
Для реализации 1-го сценария я пробовал
await store.dispatch('authenticateUser', { email: 'username', password: 'password' }).then(() => {
, но это не компилируется,
EDIT1: Является ли store.dispatch действительно асинхронным?
EDIT2: Я пытался добавить 'async' в mount ().Это шаг в правильном направлении?
async mounted() {
await store.dispatch('authenticateUser', { email: 'username', password: 'password' }).then(() => {
....
},