Polish up Passkey interface

- Fix indentation
- Split awkward initializer into separate methods
- Rename credentials to passkeys
- Simplify authenticator registry loading
- Flatten nested errors under ActionPack::WebAuthn
- Set passkey current params only requests that use it
- Inline anemic methods
- Replace custom validation with ActiveModel::Validation
- Rename identity to holder in Passkey
- Rename credentials to passkeys in JS
- Extract framework library out of controllers
- Pass params hashes down to ActionPack
- Attempt to simplify public interface
- Push data decoding down to the classes representing the data
- Introduce has_passkeys
- Add CBOR bigint support
- Rename ActionPack::WebAuthn::Passkey to ActionPack::Passkey
- Add create_passkey_button helper
- Rename public-key to creation-options
- Add sign_in_with_passkey_button helper
- Dispatch events for the whole Passkey lifecycle
- Add ED25519 support
- Prevent crash on missing meta tag
- Validate resident key options
- Don't clobber existing ActionPack config options
- Validate cryptographic params
- Move CurrentWebAuthnRequest into ActionPack::Passkey
- Use ActiveModel::Attributes for Options objects
- Implement expiring challanges
- Add lifecycle events
- Extract param helpers into Request
- Add passkey_creation_options and passkey_request_options helpers
- Add create_passkey_challenge to make it easier to override the create method if needed
- Prefix all view helpers with passkey_
- Auto-include ActionPack::Passkey::Holder
- Make the passkey challange url configurable
- Add a reminder about Passkeys to the magic link email
This commit is contained in:
Stanko K.R.
2026-03-04 14:12:40 +01:00
parent f4fbe17b22
commit 017bcc9ce1
73 changed files with 2326 additions and 1103 deletions
+4
View File
@@ -1,6 +1,7 @@
require_relative "boot"
require "rails/all"
require_relative "../lib/fizzy"
require_relative "../lib/action_pack/railtie"
Bundler.require(*Rails.groups)
@@ -25,6 +26,9 @@ module Fizzy
g.orm :active_record, primary_key_type: :uuid
end
config.action_pack.passkey.draw_routes = false
config.action_pack.passkey.challenge_url = -> { my_passkey_challenge_path(script_name: "") }
config.mission_control.jobs.http_basic_auth_enabled = false
end
end
+1
View File
@@ -10,6 +10,7 @@ pin "@rails/request.js", to: "@rails--request.js" # @0.0.13
pin_all_from "app/javascript/controllers", under: "controllers"
pin_all_from "app/javascript/helpers", under: "helpers"
pin_all_from "app/javascript/lib", under: "lib"
pin_all_from "app/javascript/initializers", under: "initializers"
pin_all_from "app/javascript/bridge/initializers", under: "bridge/initializers"
pin_all_from "app/javascript/bridge/helpers", under: "bridge/helpers"
+3
View File
@@ -0,0 +1,3 @@
Rails.application.config.to_prepare do
ActionPack::Passkey.prepend ActionPackPasskeyInferNameFromAaguid
end
+2 -2
View File
@@ -15,8 +15,6 @@ Rails.application.routes.draw do
resource :avatar
resource :role
resource :events
resources :credentials, except: %i[ show new ]
resources :push_subscriptions
resources :email_addresses, param: :token do
@@ -174,8 +172,10 @@ Rails.application.routes.draw do
resource :landing
namespace :my do
resource :passkey_challenge, only: :create
resource :identity, only: :show
resources :access_tokens
resources :passkeys, except: %i[ show new ]
resources :pins
resource :timezone
resource :menu