跳转到主要内容
本文基于 laravel/passkeys-serverlaravel/passkeys 的 README 进行初步调查。两个包目前还未打标签,处于开发中(截至 2026 年 4 月)。

这是什么样的包

在 Laravel 官方仓库中,已公开两个用于实现无密码认证(WebAuthn / passkey)的包。 把两者组合起来,就能在 Laravel 应用中一致地实现 passkey 注册和 passkey 登录。

服务端:laravel/passkeys-server

安装与初始化

1

添加 PHP 包

2

发布并执行迁移

3

在 User 模型上添加 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 并绑定到服务容器,可以替换默认行为。
通过自定义实现 PasskeyLoginResponse 等契约,可以按应用需要修改成功响应(JSON、重定向等)。

客户端:@laravel/passkeys

@laravel/passkeys 是负责浏览器端 WebAuthn ceremony 的 JavaScript 客户端。

安装

基本 API

框架辅助函数

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

passkey 自动填充

指定 autofill: true 后,可以在带 autocomplete="... webauthn" 的 input 中显示浏览器的 passkey 选择器。在不支持的环境或用户取消时会回退到常规流程。

带类型的错误

README 中公开了以下错误类。
  • NotSupportedError
  • UserCancelledError
  • PasskeyExistsError
  • PasskeyError(基类)

SSR 支持

WebAuthn 是浏览器 API,但各框架的 hook 都是 SSR 安全的。在服务器端 isSupported 会被视为 false,组件挂载后会更新为浏览器实际状态。

总结

  • laravel/passkeys-server(PHP)和 @laravel/passkeys(JS)组合起来,就能构建一套完全在 Laravel 内闭环的 passkey 认证栈。
  • 两者目前都还没有正式版本标签,但作为 Laravel 官方生态的一部分,很有可能会成为未来的标准认证手段。
  • 早期采用时,可以按 README 中给出的路由、配置、错误处理、可扩展点为前提来做设计,这样比较安全。
之后 passkey 已经作为 Laravel Fortify 的功能被正式引入。通过 Fortify 启用 passkey 时,不再直接安装 laravel/passkeys-server,而是使用 Features::passkeys()。详情请参考 Laravel Fortify 与启动套件

laravel/passkeys-server

查看服务端包的最新 README 与实现。

@laravel/passkeys

查看客户端包的最新 README 与 API。

Laravel Fortify 与启动套件

解析通过 Fortify 启用 passkey 的步骤,以及与启动套件的关系。
最后修改于 2026年7月18日