0

我是 Angular 的新手,如果用户通过身份验证,我会在网上花费大约 2 到 3 个小时来尝试从登录导航到仪表板。如果我不使用 canActivate: [AuthGuard],我可以路由到仪表板。但是,一旦我添加 canActivate: [AuthGuard] 我就卡在了登录页面上(尽管我在 firebase 控制台上看到了用户 SignIn)。它只是没有将我导航到仪表板页面

我的代码..

应用程序路由.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { DashboardComponent } from './components/dashboard/dashboard.component';
import { AuthGuard } from './shared/guard/auth.guard';
//import { SecureInnerPagesGuard } from "./shared/guard/secure-inner-pages.guard.ts.guard";
//import { HomeComponent } from './components/home/home.component';
import { SignInComponent } from './components/sign-in/sign-in.component';
import { from } from 'rxjs';

const routes: Routes = [
  { path: '', redirectTo: '/sign-in', pathMatch: 'full'},
  { path:  'sign-in',component:  SignInComponent},
  { path:  'dashboard', component:  DashboardComponent, canActivate: [AuthGuard] },
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule { }

auth.guard.ts

import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, UrlTree } from '@angular/router';
import { Observable } from 'rxjs';
import { AuthService } from  '../../auth/auth.service';
import { Router } from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class AuthGuard implements CanActivate {

  constructor(
    public authService: AuthService,
    public router: Router
  ){ }
  canActivate(
    next: ActivatedRouteSnapshot,
    state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
      if(this.authService.isLoggedIn !== true) {
        this.router.navigate(['sign-in']);
      }
      return true;
  }

}

我还在 app.module.ts 的提供者中添加了 [AuthGuard] 任何帮助将不胜感激

4

1 回答 1

0

看起来您的 if(this.authService.isLoggedIn !== true) 条件返回 true 并且您的应用导航到 route sign-in。检查this.authService.isLoggedIn登录成功时是否变为真。

你也不需要if(this.authService.isLoggedIn !== true)你可以只使用if(!this.authService.isLoggedIn).

于 2020-06-19T06:02:43.630 回答