Zum Inhalt springen

@xid-kit/angular

Angular 17+ Standalone-Provider, RxJS-Service, funktionale Route-Guardsund Standalone-Komponenten auf Basis von @xid-kit/core.

Als Markdown anzeigen

Zustand

Paketstatus: Aktuelles Paket. Angular-17+-Standalone-Provider,RxJS-Service, funktionale Guards und Standalone-Komponenten sindimplementiert. Ein echter IdP-Round-Trip auf Produktionsinfrastruktursteht noch manuell aus.

Anbieter-Einrichtung

Rufen Sie provideXid in app.config.ts auf. Es registriertden XID_CLIENT-Injection-Token und verdrahtet einenAPP_INITIALIZER, der beim Bootstrap client.load() aufruft.Kein NgModule erforderlich.

// app.config.ts
import { ApplicationConfig } from '@angular/core'
import { provideXid } from '@xid-kit/angular'

export const appConfig: ApplicationConfig = {
  providers: [
    provideXid({ apiUrl: 'https://app.xid.dev' }),
  ],
}

XidAuthService

import { Component, inject } from '@angular/core'
import { AsyncPipe } from '@angular/common'
import { XidAuthService } from '@xid-kit/angular'

@Component({
  selector: 'app-header',
  standalone: true,
  imports: [AsyncPipe],
  template: `
    @if (auth.isLoaded$ | async) {
      @if (auth.isSignedIn$ | async) {
        <span>{{ (auth.user$ | async)?.primaryEmailAddress }}</span>
      } @else {
        <a routerLink="/sign-in">Sign in</a>
      }
    }
  `,
})
export class HeaderComponent {
  readonly auth = inject(XidAuthService)
}

Angular-Signals-Bridge

Verwenden Sie toSignal() aus @angular/core/rxjs-interop, umObservables für Template-Lesezugriffe in Signals umzuwandeln.

import { toSignal } from '@angular/core/rxjs-interop'
import { inject } from '@angular/core'
import { XidAuthService } from '@xid-kit/angular'

@Component({ standalone: true, ... })
export class MyComponent {
  readonly #auth = inject(XidAuthService)
  readonly user = toSignal(this.#auth.user$, { initialValue: null })
}

Route-Guards

import { Routes } from '@angular/router'
import { authGuard, hasOrganizationGuard, hasPermissionGuard } from '@xid-kit/angular'

export const routes: Routes = [
  {
    path: 'dashboard',
    canActivate: [authGuard()],
    loadComponent: () => import('./dashboard.component').then(m => m.DashboardComponent),
  },
  {
    path: 'admin',
    canActivate: [hasPermissionGuard('org:settings:write')],
    loadComponent: () => import('./admin.component').then(m => m.AdminComponent),
  },
]

Standalone-Komponenten

<!-- template -->
<xid-sign-in-button signInUrl="/sign-in" redirectUrl="/dashboard">Log in</xid-sign-in-button>
<xid-sign-out-button redirectUrl="/home">Log out</xid-sign-out-button>

Exportierte API

Exportieren Art Zweck
provideXid function Registriert XID_CLIENT-Singleton und APP_INITIALIZER; akzeptiertProvideXidOptions
XID_CLIENT InjectionToken Die rohe XidClient-Instanz; bevorzugen Sie XidAuthService für die meistenAnwendungsfälle
XidAuthService Service RxJS-Observables: state$, isLoaded$, isSignedIn$, user$, session$,organization$; plus getToken, signOut, setActiveOrganization,setActiveSession
authGuard CanActivateFn-Factory Leitet zu /sign-in weiter, wenn der Benutzer nicht angemeldet ist
hasOrganizationGuard CanActivateFn-Factory Leitet weiter, wenn kein aktiver Organisationskontext vorhanden ist
hasPermissionGuard CanActivateFn-Factory Leitet weiter, wenn dem Benutzer die angegebene Berechtigung fehlt
SignInButton Standalone-Komponente Selektor xid-sign-in-button; Eingaben signInUrl, redirectUrl, ariaLabel
SignOutButton Standalone-Komponente Selektor xid-sign-out-button; Eingaben sessionId, redirectUrl, ariaLabel;zeigt aria-busy während des Abmeldens
Navigation

Suchbegriff eingeben...

Mit den Pfeiltasten navigierenEingabetaste zum AuswählenEscape zum Schließen