Ir para o conteúdo

@xid-kit/angular

Provider standalone Angular 17+, serviço RxJS, guards funcionais derota e componentes standalone sobre @xid-kit/core.

Ver como Markdown

Estado

O status do pacote é Pacote atual. Provider standalone Angular17+, serviço RxJS, guards funcionais e componentes standalone estãoimplementados. Uma ida e volta real com o IdP em infraestrutura deprodução ainda está pendente de verificação manual.

Configuração do provedor

Chame provideXid em app.config.ts. Registra o token deinjeção XID_CLIENT e conecta um APP_INITIALIZER quechama client.load() no bootstrap. Nenhum NgModule necessário.

// 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)
}

Ponte de signals Angular

Use toSignal() de @angular/core/rxjs-interop paraconverter observables em signals para leituras em templates.

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 })
}

Guards de rota

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),
  },
]

Componentes standalone

<!-- 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>

API exportada

Exportar Tipo Finalidade
provideXid function Registra o singleton XID_CLIENT e APP_INITIALIZER; aceitaProvideXidOptions
XID_CLIENT InjectionToken A instância bruta do XidClient; prefira XidAuthService para a maioriados casos de uso
XidAuthService serviço Observables RxJS: state$, isLoaded$, isSignedIn$, user$, session$,organization$; mais getToken, signOut, setActiveOrganization,setActiveSession
authGuard Factory de CanActivateFn Redireciona para /sign-in quando o usuário não está autenticado
hasOrganizationGuard Factory de CanActivateFn Redireciona quando nenhum contexto de organização ativo está presente
hasPermissionGuard Factory de CanActivateFn Redireciona quando o usuário não tem a permissão especificada
SignInButton componente standalone Seletor xid-sign-in-button; entradas signInUrl, redirectUrl, ariaLabel
SignOutButton componente standalone Seletor xid-sign-out-button; entradas sessionId, redirectUrl,ariaLabel; exibe aria-busy durante o logout
Navegação

Digite para pesquisar...

Use as teclas de seta para navegarPressione Enter para selecionarPressione Escape para fechar