Skip to main content
本文根據 laravel/passkeys-serverlaravel/passkeys 的 README 進行初步調查。兩個套件仍處於未打 tag 的開發階段(2026 年 4 月時點)。

這是什麼套件

Laravel 官方儲存庫公開了兩個實作無密碼認證(WebAuthn / Passkey)的套件。 兩者組合可在 Laravel 應用中一致地實作 Passkey 註冊與 Passkey 登入。

伺服器端:laravel/passkeys-server

安裝與初始設定

1

加入 PHP 套件

2

發佈並執行 migration

3

於 User Model 加上 trait 與 contract

視需要也可發佈設定檔。

自動註冊的路由

config/passkeys.php 主要選項

  • relying_party_id
  • allowed_origins
  • user_handle_secret
  • timeout
  • guard
  • middleware
  • throttle
  • redirect

事件

套件會發出以下事件。
  • PasskeyRegistered
  • PasskeyVerified
  • PasskeyDeleted

客製化點

可用 Passkeys::authorizeLoginUsing() 控制驗證成功後是否允許登入。若要中止可回傳 false 或拋出 ValidationException
可繼承 GenerateRegistrationOptions / GenerateVerificationOptions / StorePasskey / VerifyPasskey / DeletePasskey,並綁定到 Service Container 以替換行為。
可自實作 PasskeyLoginResponse 等 contract,把成功時的回應(JSON、重新導向等)調整為符合應用需求。

用戶端:@laravel/passkeys

@laravel/passkeys 是處理瀏覽器 WebAuthn ceremony 的 JavaScript 用戶端。

安裝

基本 API

框架 helper

  • React:@laravel/passkeys/reactusePasskeyVerifyusePasskeyRegister
  • Vue:@laravel/passkeys/vueusePasskeyVerifyusePasskeyRegister
  • Svelte:@laravel/passkeys/svelteusePasskeyVerifyusePasskeyRegister

Passkey 自動填入

指定 autofill: true 可在具有 autocomplete="... webauthn" 的 input 上顯示瀏覽器的 Passkey picker。不支援的環境或使用者取消時,會退回一般流程。

型別化錯誤

README 中公開的錯誤類別如下。
  • NotSupportedError
  • UserCancelledError
  • PasskeyExistsError
  • PasskeyError(base class)

SSR 對應

WebAuthn 屬於瀏覽器 API,但各框架 hook 皆 SSR 安全。伺服器端 isSupported 會被視為 false,掛載後才更新為真正的瀏覽器狀態。

總結

  • 組合 laravel/passkeys-server(PHP)與 @laravel/passkeys(JS),可在 Laravel 建構完整的 Passkey 認證堆疊。
  • 兩者仍處於未打 tag 的開發階段,但作為 Laravel 官方生態系,未來很可能成為標準認證方式。
  • 若要提早導入,安全的做法是以 README 中的路由、設定、錯誤處理、客製化擴充點為前提來設計。
之後 Passkey 正式作為 Laravel Fortify 的功能加入。透過 Fortify 啟用 Passkey 時,應使用 Features::passkeys(),而不是直接安裝 laravel/passkeys-server。詳情請參考 Laravel Fortify 與啟動套件

laravel/passkeys-server

確認伺服器端套件的最新 README 與實作。

@laravel/passkeys

確認用戶端套件的最新 README 與 API。

Laravel Fortify 與啟動套件

解說透過 Fortify 啟用 Passkey 的步驟與其與啟動套件的關係。
最後修改於 2026年8月2日