Zum Inhalt springen

@xid-kit/solid

SolidJS-Kontext-Provider, signalbasierte Auth-Primitive undHeadless-Komponenten auf Basis von @xid-kit/core.

Als Markdown anzeigen

Zustand

Paketstatus: Aktuelles Paket. SolidJS-Kontext-Provider,signalbasierte Primitive und Headless-Komponenten sind implementiert. Einechter IdP-Round-Trip auf Produktionsinfrastruktur steht noch manuell aus.

Anbieter-Einrichtung

Umschließen Sie Ihre App mit XidProvider. Es erstellt einenXidClient, ruft beim Mounten client.load() auf, um dieaktuelle Sitzung abzurufen, und bereinigt über onCleanup.

import { XidProvider } from '@xid-kit/solid'

export function App() {
  return (
    <XidProvider publishableKey="pk_live_...">
      <Routes />
    </XidProvider>
  )
}

Auth-Primitive

Jedes Primitive gibt reaktive Accessor<T>-Getter-Funktionen zurück.Rufen Sie sie in JSX oder createEffect auf, um Änderungen zuverfolgen.

import { createAuth, createUser, createOrganization, createSession } from '@xid-kit/solid'
import { Show } from 'solid-js'

function Profile() {
  const auth = createAuth()
  // auth.isLoaded()  -- Accessor<boolean>
  // auth.isSignedIn() -- Accessor<boolean>
  // auth.userId()    -- Accessor<string | null>
  // auth.getToken()  -- () => Promise<Result<string, XidError>>
  // auth.signOut()   -- (options?) => Promise<Result<null, XidError>>

  return (
    <Show when={auth.isLoaded()} fallback={<p>Loading...</p>}>
      <Show when={auth.isSignedIn()} fallback={<p>Not signed in</p>}>
        <p>Signed in as {auth.userId()}</p>
        <button onClick={() => void auth.signOut()}>Sign out</button>
      </Show>
    </Show>
  )
}

createOrganization und createSession

const org = createOrganization()
// org() is CreateOrganizationReturn
if (org().isSignedIn) {
  console.log(org().organization?.name, org().membership?.role)
  await org().setActive('org_new_id')
}

const session = createSession()
if (session().isSignedIn) {
  const { value: token } = await session().getToken()
  // use token for backend requests
}

Headless-Komponenten

import { SignInButton, SignOutButton, Protect } from '@xid-kit/solid'

// Navigates to /sign-in by default
<SignInButton signInUrl="/auth/sign-in" redirectUrl="/dashboard">
  Log in
</SignInButton>

// Signs out all sessions; pass sessionId to target one
<SignOutButton redirectUrl="/home">Log out</SignOutButton>

// Role and permission gate
<Protect role="org:admin" fallback={<p>Admins only</p>}>
  <Settings />
</Protect>

<Protect permission="org:member:write" fallback={null}>
  <InviteForm />
</Protect>

Exportierte API

Exportieren Art Zweck
XidProvider Komponente Erstellt XidClient, ruft load() beim Mounten auf, bereinigt über onCleanup
createAuth Primitiv isLoaded, isSignedIn, userId, sessionId, session, getToken, signOut alsAccessors
createUser Primitiv Accessor, der eine Discriminated Union über isLoaded / isSignedIn / userkapselt
createOrganization Primitiv Accessor, der Organisation, Mitgliedschaft und setActive für die aktiveOrganisation zurückgibt
createSession Primitiv Accessor, der Sitzung und getToken für die aktive Sitzung zurückgibt
SignInButton Komponente Headless-Button, der beim Klicken zur Anmelde-URL navigiert
SignOutButton Komponente Headless-Button, der beim Klicken signOut aufruft
Protect Komponente Rollen- und Berechtigungsgate mit Fallback-Prop

Token-Speicher

  • Sitzungs-Tokens sind HttpOnly-Cookies, die vom XID Worker gesetztwerden. Das SDK speichert Tokens nie in localStorage.
  • getToken() gibt ein kurzlebiges JWT (60 s) zurück, das vomTokenManager in @xid-kit/core zwischengespeichert wird.
Navigation

Suchbegriff eingeben...

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