> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Eerste verkenning van Laravel Passkeys (passkeys-server + @laravel/passkeys)

> Een eerste verkenning van laravel/passkeys-server (PHP) en @laravel/passkeys (npm). We behandelen installatie, integratie met het User-model, routes, configuratie, events, de frontend-API, getypeerde errors en SSR-ondersteuning.

<Info>
  Dit artikel is een eerste verkenning op basis van de README's van `laravel/passkeys-server` en `laravel/passkeys`. Beide packages bevinden zich nog in een ontwikkelstadium zonder tags (per april 2026).
</Info>

## Wat zijn dit voor packages

In de officiële Laravel-repository's zijn twee packages gepubliceerd voor het implementeren van wachtwoordloze authenticatie (WebAuthn / passkeys).

* Serverzijde (PHP): [`laravel/passkeys-server`](https://github.com/laravel/passkeys-server)
* Clientzijde (JavaScript): [`@laravel/passkeys`](https://github.com/laravel/passkeys)

Door deze twee te combineren kun je in een Laravel-app passkey-registratie en passkey-login van begin tot eind implementeren.

## Serverzijde: `laravel/passkeys-server`

### Installatie en eerste setup

<Steps>
  <Step title="Voeg de PHP-package toe">
    ```bash theme={null}
    composer require laravel/passkeys
    ```
  </Step>

  <Step title="Publiceer de migraties en voer ze uit">
    ```bash theme={null}
    php artisan vendor:publish --tag=passkeys-migrations
    php artisan migrate
    ```
  </Step>

  <Step title="Voeg de trait en het contract toe aan je User-model">
    ```php theme={null}
    use Laravel\Passkeys\Contracts\PasskeyUser;
    use Laravel\Passkeys\PasskeyAuthenticatable;

    class User extends Authenticatable implements PasskeyUser
    {
        use PasskeyAuthenticatable;
    }
    ```
  </Step>
</Steps>

Desgewenst kun je ook het configuratiebestand publiceren.

```bash theme={null}
php artisan vendor:publish --tag=passkeys-config
```

### Automatisch geregistreerde routes

| Categorie         | Methode  | Route                       | Rol                            |
| ----------------- | -------- | --------------------------- | ------------------------------ |
| Login (guest)     | `GET`    | `/passkeys/login/options`   | Authenticatie-opties ophalen   |
| Login (guest)     | `POST`   | `/passkeys/login`           | Passkey verifiëren en inloggen |
| Confirm (auth)    | `GET`    | `/passkeys/confirm/options` | Bevestigingsopties ophalen     |
| Confirm (auth)    | `POST`   | `/passkeys/confirm`         | Passkey bevestigen             |
| Management (auth) | `GET`    | `/user/passkeys/options`    | Registratieopties ophalen      |
| Management (auth) | `POST`   | `/user/passkeys`            | Nieuwe passkey opslaan         |
| Management (auth) | `DELETE` | `/user/passkeys/{passkey}`  | Passkey verwijderen            |

### Belangrijkste opties in `config/passkeys.php`

* `relying_party_id`
* `allowed_origins`
* `user_handle_secret`
* `timeout`
* `guard`
* `middleware`
* `throttle`
* `redirect`

### Events

De package vuurt de volgende events af.

* `PasskeyRegistered`
* `PasskeyVerified`
* `PasskeyDeleted`

### Aanpassingsmogelijkheden

<AccordionGroup>
  <Accordion title="LoginAuthorizationCallback (loginautorisatie bepalen)">
    Met `Passkeys::authorizeLoginUsing()` bepaal je of de login na een geslaagde verificatie wordt toegestaan. Wil je de login tegenhouden, geef dan `false` terug of gooi een `ValidationException`.
  </Accordion>

  <Accordion title="CustomActions (WebAuthn-verwerking vervangen)">
    Je kunt `GenerateRegistrationOptions` / `GenerateVerificationOptions` / `StorePasskey` / `VerifyPasskey` / `DeletePasskey` extenden en aan de servicecontainer binden om het gedrag te vervangen.
  </Accordion>

  <Accordion title="CustomResponses (responses vervangen)">
    Door contracts zoals `PasskeyLoginResponse` zelf te implementeren, kun je de succesresponse (JSON, redirect, enz.) aanpassen aan de eisen van je app.
  </Accordion>
</AccordionGroup>

## Clientzijde: `@laravel/passkeys`

`@laravel/passkeys` is een JavaScript-client die de WebAuthn-ceremonie in de browser afhandelt.

### Installatie

```bash theme={null}
npm install @laravel/passkeys
```

### Basis-API

```js theme={null}
import { Passkeys } from "@laravel/passkeys";

await Passkeys.register({ name: "My MacBook" });
await Passkeys.verify();
```

### Frameworkhelpers

* React: `usePasskeyVerify` en `usePasskeyRegister` uit `@laravel/passkeys/react`
* Vue: `usePasskeyVerify` en `usePasskeyRegister` uit `@laravel/passkeys/vue`
* Svelte: `usePasskeyVerify` en `usePasskeyRegister` uit `@laravel/passkeys/svelte`

### Passkey-autofill

Met `autofill: true` kun je de passkey-picker van de browser tonen bij inputs met `autocomplete="... webauthn"`. In niet-ondersteunde omgevingen of wanneer de gebruiker annuleert, valt de flow terug op het normale proces.

### Getypeerde errors

De README documenteert de volgende errorklassen.

* `NotSupportedError`
* `UserCancelledError`
* `PasskeyExistsError`
* `PasskeyError` (basisklasse)

### SSR-ondersteuning

WebAuthn is een browser-API, maar de hooks voor elk framework zijn SSR-safe. Aan de serverzijde wordt `isSupported` als `false` behandeld en na het mounten bijgewerkt naar de werkelijke browserstatus.

## Samenvatting

* Door `laravel/passkeys-server` (PHP) en `@laravel/passkeys` (JS) te combineren, bouw je een volledige passkey-authenticatiestack binnen Laravel.
* Beide packages bevinden zich nog in een ontwikkelstadium zonder tags, maar als onderdeel van het officiële Laravel-ecosysteem is de kans groot dat dit de standaard authenticatiemethode van de toekomst wordt.
* Als je vroeg instapt, is het verstandig om je ontwerp te baseren op de routes, configuratie, foutafhandeling en uitbreidingspunten uit de README.

<Info>
  Passkeys zijn inmiddels **officieel toegevoegd als feature van Laravel Fortify**. Wil je passkeys via Fortify inschakelen, gebruik dan `Features::passkeys()` in plaats van `laravel/passkeys-server` direct te installeren. Zie [Laravel Fortify en de starter kits](/nl/advanced/fortify) voor meer informatie.
</Info>

<Card title="laravel/passkeys-server" icon="github" href="https://github.com/laravel/passkeys-server">
  Bekijk de nieuwste README en implementatie van de serverpackage.
</Card>

<Card title="@laravel/passkeys" icon="github" href="https://github.com/laravel/passkeys">
  Bekijk de nieuwste README en API van de clientpackage.
</Card>

<Card title="Laravel Fortify en de starter kits" icon="shield-check" href="/nl/advanced/fortify">
  Uitleg over het inschakelen van passkeys via Fortify en de relatie met de starter kits.
</Card>


## Related topics

- [Laravel Fortify en de starter kits](/nl/advanced/fortify.md)
- [Laravel-updates van april 2026](/nl/blog/changelog/202604.md)
- [Migratiegids van laravel/ui naar Fortify](/nl/blog/ui-to-fortify.md)
- [Laravel Chisel — een bibliotheek voor post-installatiescripts van starter kits](/nl/blog/chisel-introduction.md)
- [部落格](/zh-TW/blog/index.md)
