AuthGuard на Ionic 4 не работает должным образом - PullRequest
0 голосов
/ 03 июня 2019

Я использую 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');
        });
    }

}
...