Amazon cognito 및 Vue.js를 사용하여 사용자가 인증될 때까지 mounted()에서 앱을 차단합니다.
다음 코드로 Vue.js 앱에서 Amazon Cognito를 사용하여 사용자를 인증합니다.
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');
먼저 async authenticate User 액션을 시작하고 이것이 완료되면 모든 axios 요구가 자동으로 인증 정보를 서버로 전송하는 방식으로 axios를 설정합니다.
유일하게 파악하지 못한 것은 앱 내의 모든 Axios 요청을 비동기 인증 완료까지 대기시키는 방법(예를 들어 메인 앱 페이지에서 Axios 요청을 실행하여 비동기 인증이 진행 중일 때 데이터를 채울 수 있으므로 대기시키는 메커니즘이 있어야 합니다).
다른 언어(예를 들어 C++나 C#)에는 두 가지 대안이 있습니다. 1. 인증이 완료될 때까지 mounted()에서 앱을 차단합니다. 2. 모든 요청을 완료 이벤트를 대기시킵니다.
JavaScript는 어떻습니까?
처음 시도한 시나리오를 구현하기 위해
await store.dispatch('authenticateUser', { email: 'username', password: 'password' }).then(() => {
컴파일되지 않습니다.
EDIT1: store.dispatch는 정말 비동기입니까?
EDIT2: mounted()에 'async'를 추가하려고 했습니다.올바른 방향으로 가는 단계입니까?
async mounted() {
await store.dispatch('authenticateUser', { email: 'username', password: 'password' }).then(() => {
....
},
일부 콘텐츠가 포함된 앱이 있으며 인증된 사용자만 액세스할 수 있도록 허용하고 그렇지 않으면 잘못된 사용자를 다른 페이지로 리디렉션할 것입니다. 다음과 같이 하십시오.
import Vue from 'vue';
import VueRouter from 'vue-router';
import Vuetify from 'vuetify';
import Vuex from 'vuex';
import axios from 'axios';
import VueAxios from 'vue-axios';
import store from './index'
Vue.use(Vuetify);
Vue.use(VueRouter);
Vue.use(Vuex);
Vue.use(VueAxios, axios);
var myapp=null;
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;
myapp=new Vue({}).$mount('#app');//the right app
}
return config;
});
} else {
this.flashError('AWS user is not authenticated.');
myapp=new Vue({}).$mount('#app');//app that contains warnings
}
}).catch((err) => {
this.flashError(`AWS authentication error: ${err.message}`);
myapp=new Vue({}).$mount('#app');//app that contains warnings
});
따라서 응답이 정상일 경우,Vue
적절한 내용을 가진 인스턴스
myapp=new Vue({}).$mount('#app');
그렇지 않으면 해당 사용자를 경고가 포함된 앱으로 리디렉션합니다.
언급URL : https://stackoverflow.com/questions/52706836/block-the-app-in-mounted-until-the-user-is-authenticated-using-amazon-cognito
'programing' 카테고리의 다른 글
v-data-table 데이터를 제대로 표시할 수 없습니다. "잘못된 제안: "항목"에 대한 형식 검사에 실패했습니다.어레이가 필요하지만 오브젝트가 있습니다." (0) | 2022.07.17 |
---|---|
Java용 CSV API (0) | 2022.07.17 |
vue 2 소품 정의 안 됨 (0) | 2022.07.17 |
SSLHandShakeException을 통해 handshake_failure 치명적인 경고를 수신했습니다. (0) | 2022.07.17 |
Akka 프레임워크의 가장 좋은 사용 사례는 무엇입니까? (0) | 2022.07.17 |