У меня проблемы с методом входа, который я пытаюсь сделать с помощью AWS Amplify. Он имеет многофакторную аутентификацию, и когда MFA успешен, я пытаюсь направить приложение на другой маршрут / компонент через router.navigate ().
Когда я делаю это, конструктор не запускается. Здесь я подписан на Amplify authState с внедрением зависимостей. Он подписывается на authState и вводит информацию о пользователе. Он не работает с первоначальным успехом и маршрутизацией через router.navigate (). Если я обновляю страницу, все работает нормально, потому что она вызывает конструктор.
Я пытался использовать ngZone.run (), но у меня это тоже не сработало. Вот мой код.
Проверка многофакторной аутентификации для входа в систему - Компонент входа
submitMFA() {
console.log(this.mfaCode);
if (this.mfaType == 'SMS_MFA') {
Auth.confirmSignIn(this.user,this.mfaCode, 'SMS_MFA')
.then(user => {
this.loginSuccess();
})
.catch(err => {
this.loginError(err);
});
} else {
Auth.confirmSignIn(this.user,this.mfaCode, 'SOFTWARE_TOKEN_MFA')
.then(user => {
this.loginSuccess();
})
.catch(err => {
this.loginError(err);
});
}
}
loginSuccess() {
console.log("Success");
console.log(this.user);
this.resetMFA();
this.router.navigate(['/home']);
}
Домашний компонент Я пытаюсь перейти к:
import { Component, OnInit, NgZone } from '@angular/core';
import { AmplifyService } from 'aws-amplify-angular';
import { Auth } from 'aws-amplify';
var QRCode = require('qrcode');
@Component({
selector: 'home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
userGroup: string = "none";
user: any = null
preferredMFA: string = null;
totpSetup: boolean = false
constructor(private amplifyService: AmplifyService, private ngZone: NgZone) {
this.amplifyService.authStateChange$
.subscribe(authState => {
if (authState.state === 'signedIn') {
this.user = authState.user;
console.log(this.user);
if (authState.user.signInUserSession.accessToken.payload["cognito:groups"]) {
// This sets what group the user is in. Based on this group we set what perspectives will show. Ex: The 'Administration' link only shows in the nav bar for users in the Admins group
this.userGroup = authState.user.signInUserSession.accessToken.payload["cognito:groups"][0];
} else {
console.log("No usergroup found");
}
this.preferredMFA = this.user.preferredMFA;
}
});
}
Вот мой файл routing.ts
import { ModuleWithProviders } from '@angular/core/src/metadata/ng_module';
import { Routes, RouterModule } from '@angular/router';
import { AuthenticationComponent } from './components/authentication/authentication.component';
import { HomeComponent } from './components/home/home.component';
import { NotFoundComponent } from './components/not-found/not-found.component';
export const ROUTES: Routes = [
{path: '', component: AuthenticationComponent},
{path: 'home', component: HomeComponent},
{path: '**', component: NotFoundComponent}
];
export const ROUTING: ModuleWithProviders = RouterModule.forRoot(ROUTES)