Я использую Ionic 4 для создания мобильного приложения.Я пытаюсь создать систему аутентификации и использовать для этого авторизационную службу и службу аутентификации.
Когда я вхожу в приложение, я должен дважды нажать кнопку входа в систему.
Как будто маршрутизаторпринял во внимание охрану второй раз.Я не думаю, что это исходит от Обещания.Я не знаю, откуда это.
AuthGuard
export class AuthGuard implements CanActivate {
constructor(
private router: Router,
private authService: AuthService,
) {}
canActivate(): any {
return new Promise((resolve, reject) => {
this.authService.isLoggedIn().subscribe((response) => {
resolve(response);
});
});
}
}
AuthService
isLoggedIn() {
return this.authSubject.asObservable();
}
Маршрут панели мониторинга
{
path: 'dashboard',
loadChildren: './dashboard/dashboard.module#DashboardPageModule',
canActivate: [
AuthGuard,
],
},
Шаблон входа в систему Auth
<ion-content color="primary" padding>
<form #form="ngForm" (ngSubmit)="login(form)">
<ion-grid>
<ion-row color="primary" justify-content-center>
<ion-col align-self-center size-md="6" size-lg="5" size-xs="12">
<div text-center>
<h3>Login</h3>
</div>
<div padding>
<ion-item>
<ion-input name="email" type="email" placeholder="your@email.com" ngModel required></ion-input>
</ion-item>
<ion-item>
<ion-input name="password" type="password" placeholder="Password" ngModel required></ion-input>
</ion-item>
</div>
<div padding>
<ion-button size="large" type="submit" [disabled]="form.invalid" expand="block">Login</ion-button>
</div>
</ion-col>
</ion-row>
<ion-row>
<div text-center>
If you don't have an account, please <a routerLink="/register">register</a> first!
</div>
</ion-row>
</ion-grid>
</form>
</ion-content>
Контроллер страницы входа
import {Component, OnInit} from '@angular/core';
import {AuthService} from '../auth.service';
import {Router} from '@angular/router';
@Component({
selector: 'app-login',
templateUrl: './login.page.html',
styleUrls: ['./login.page.scss'],
})
export class LoginPage implements OnInit {
constructor(
private authService: AuthService,
private router: Router,
) {
}
ngOnInit() {
}
login(form) {
this.authService.login(form.value).subscribe((res) => {
this.router.navigateByUrl('dashboard');
});
}
}