在Angular应用中,路由保护是一种机制,用于控制用户对特定路由的访问权限。Firebase则是一个提供后端服务的平台,包括身份验证、实时数据库、云存储等功能。结合这两者,可以实现基于用户身份验证的路由保护。
在Firebase控制台中启用身份验证,并添加相应的登录方式。
// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { ProtectedComponent } from './protected/protected.component';
const routes: Routes = [
{ path: '', component: HomeComponent },
{ path: 'protected', component: ProtectedComponent, 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, Router } from '@angular/router';
import { Observable } from 'rxjs';
import { AngularFireAuth } from '@angular/fire/auth';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private afAuth: AngularFireAuth, private router: Router) {}
canActivate(
route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return this.afAuth.authState.pipe(
take(1),
map(auth => !!auth),
tap(loggedIn => {
if (!loggedIn) {
this.router.navigate(['/login']);
}
})
);
}
}
canActivate
方法中的逻辑正确,能够正确判断用户是否已经登录。通过以上步骤和示例代码,你可以实现基于Firebase身份验证的Angular路由保护。
领取专属 10元无门槛券
手把手带您无忧上云