or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

ai.mdanalytics.mdapp-check.mdauth-guard.mdauthentication.mddata-connect.mddatabase.mdfirebase-app.mdfirestore.mdfunctions.mdindex.mdmessaging.mdperformance.mdremote-config.mdstorage.mdvertexai.md
tile.json

auth-guard.mddocs/

Auth Guard

Angular route guards and utilities for implementing authentication-based routing and access control with Firebase Authentication.

Capabilities

Auth Guard

/**
 * Angular route guard for authentication-based routing
 */
export class AuthGuard implements CanActivate {
  constructor(router: Router, auth: Auth);
  canActivate(
    route: ActivatedRouteSnapshot,
    state: RouterStateSnapshot
  ): Observable<boolean | UrlTree>;
}

/**
 * Auth Guard NgModule
 */
export class AuthGuardModule {
  static forRoot(): ModuleWithProviders<AuthGuardModule>;
}

Auth Pipes

Functions that return authentication state predicates for route guards.

/**
 * Basic authentication pipe - checks if user is logged in
 */
export const loggedIn: AuthPipe;

/**
 * Check if user is not anonymous
 */
export const isNotAnonymous: AuthPipe;

/**
 * Check if user's email is verified
 */
export const emailVerified: AuthPipe;

/**
 * Redirect unauthorized users to specified route
 * @param redirect - Route to redirect to
 * @returns Auth pipe function
 */
export function redirectUnauthorizedTo(redirect: any[]): AuthPipe;

/**
 * Redirect logged in users to specified route
 * @param redirect - Route to redirect to
 * @returns Auth pipe function
 */
export function redirectLoggedInTo(redirect: any[]): AuthPipe;

/**
 * Check if user has custom claim
 * @param claim - Claim name to check
 * @returns Auth pipe function
 */
export function hasCustomClaim(claim: string): AuthPipe;

/**
 * Check if user has custom claim with specific value
 * @param claim - Claim name to check
 * @param value - Expected claim value
 * @returns Auth pipe function
 */
export function hasCustomClaimValue(
  claim: string,
  value: any
): AuthPipe;

Helper Functions

/**
 * Create route configuration with auth guard
 * @param pipe - Auth pipe or array of auth pipes
 * @returns CanActivate function for route configuration
 */
export function canActivate(
  pipe: AuthPipe | AuthPipe[]
): () => Observable<boolean | string | any[]>;

Types

/**
 * Authentication pipe function type
 */
type AuthPipe = (user: User | null) => boolean | string | any[];

/**
 * Authentication pipe generator function type
 */
type AuthPipeGenerator = (...args: any[]) => AuthPipe;

Usage Examples

Basic Route Protection

import { Routes } from '@angular/router';
import { 
  AuthGuard, 
  redirectUnauthorizedTo, 
  redirectLoggedInTo,
  canActivate 
} from '@angular/fire/auth-guard';

const redirectUnauthorizedToLogin = () => redirectUnauthorizedTo(['/login']);
const redirectLoggedInToItems = () => redirectLoggedInTo(['/items']);
const belongsToAccount = (next: any) => hasCustomClaim(`account-${next.params.id}`);

export const routes: Routes = [
  {
    path: '',
    pathMatch: 'full',
    component: HomeComponent,
    ...canActivate(redirectLoggedInToItems)
  },
  {
    path: 'login',
    component: LoginComponent,
    ...canActivate(redirectLoggedInToItems)
  },
  {
    path: 'items',
    component: ItemsComponent,
    ...canActivate(redirectUnauthorizedToLogin)
  },
  {
    path: 'account/:id',
    component: AccountComponent,
    ...canActivate(belongsToAccount)
  }
];

Component-based Auth Checking

import { Component, inject } from '@angular/core';
import { Auth, user } from '@angular/fire/auth';
import { map } from 'rxjs/operators';

@Component({
  selector: 'app-protected',
  template: `
    <div *ngIf="isLoggedIn$ | async; else loginPrompt">
      <h2>Protected Content</h2>
      <div *ngIf="isEmailVerified$ | async; else verifyEmail">
        <p>Welcome, verified user!</p>
      </div>
      <ng-template #verifyEmail>
        <p>Please verify your email address.</p>
      </ng-template>
    </div>
    
    <ng-template #loginPrompt>
      <p>Please log in to access this content.</p>
    </ng-template>
  `,
})
export class ProtectedComponent {
  private auth = inject(Auth);
  
  user$ = user(this.auth);
  isLoggedIn$ = this.user$.pipe(map(user => !!user));
  isEmailVerified$ = this.user$.pipe(
    map(user => user?.emailVerified ?? false)
  );
  isAnonymous$ = this.user$.pipe(
    map(user => user?.isAnonymous ?? true)
  );
}

Custom Auth Pipes

import { hasCustomClaim, emailVerified, isNotAnonymous } from '@angular/fire/auth-guard';

// Check for admin role
const adminOnly = () => hasCustomClaim('admin');

// Check for specific permission
const canEditPosts = () => hasCustomClaimValue('permissions', 'edit_posts');

// Combine multiple conditions
const verifiedNonAnonymousUser = () => [
  emailVerified,
  isNotAnonymous
];

// Use in routes
const routes: Routes = [
  {
    path: 'admin',
    component: AdminComponent,
    ...canActivate(adminOnly)
  },
  {
    path: 'edit-posts',
    component: EditPostsComponent,
    ...canActivate(canEditPosts)
  },
  {
    path: 'verified-area',
    component: VerifiedAreaComponent,
    ...canActivate(verifiedNonAnonymousUser)
  }
];