Rename create_options to registration_options
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
# Generate options for the browser's +navigator.credentials.create()+ call, then register the
|
||||
# response:
|
||||
#
|
||||
# options = ActionPack::Passkey.creation_options(holder: current_user)
|
||||
# options = ActionPack::Passkey.registration_options(holder: current_user)
|
||||
# # Pass options to the browser
|
||||
#
|
||||
# passkey = ActionPack::Passkey.register(params[:passkey], holder: current_user)
|
||||
@@ -35,12 +35,12 @@ class ActionPack::Passkey < Rails.configuration.action_pack.passkey.parent_class
|
||||
class << self
|
||||
# Returns a CreationOptions object for the given +holder+, suitable for passing to the
|
||||
# browser's +navigator.credentials.create()+ call. Merges global defaults from the Rails
|
||||
# configuration, holder-specific options from +holder.passkey_creation_options+, and any
|
||||
# configuration, holder-specific options from +holder.passkey_registration_options+, and any
|
||||
# additional +options+ overrides.
|
||||
def creation_options(holder:, **options)
|
||||
def registration_options(holder:, **options)
|
||||
ActionPack::WebAuthn::PublicKeyCredential.creation_options(
|
||||
**Rails.configuration.action_pack.web_authn.default_creation_options.to_h,
|
||||
**holder.passkey_creation_options.to_h,
|
||||
**holder.passkey_registration_options.to_h,
|
||||
**options
|
||||
)
|
||||
end
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
#
|
||||
# Include this module in your helper or ApplicationHelper to get access to:
|
||||
#
|
||||
# - +passkey_creation_button+ — render a <rails-passkey-creation-button> web component with
|
||||
# - +passkey_registration_button+ — render a <rails-passkey-registration-button> web component with
|
||||
# a form, hidden fields, and error messages for the registration ceremony.
|
||||
# - +passkey_sign_in_button+ — render a <rails-passkey-sign-in-button> web component with
|
||||
# a form, hidden fields, and error messages for the authentication ceremony.
|
||||
module ActionPack::Passkey::FormHelper
|
||||
CREATION_ERROR_MESSAGE = "Something went wrong while registering your passkey."
|
||||
CREATION_CANCELLED_MESSAGE = "Passkey registration was cancelled. Try again when you are ready."
|
||||
REGISTRATION_ERROR_MESSAGE = "Something went wrong while registering your passkey."
|
||||
REGISTRATION_CANCELLED_MESSAGE = "Passkey registration was cancelled. Try again when you are ready."
|
||||
SIGN_IN_ERROR_MESSAGE = "Something went wrong while signing in with your passkey."
|
||||
SIGN_IN_CANCELLED_MESSAGE = "Passkey sign in was cancelled. Try again when you are ready."
|
||||
|
||||
# Renders a +<rails-passkey-creation-button>+ web component containing a form with hidden
|
||||
# Renders a +<rails-passkey-registration-button>+ web component containing a form with hidden
|
||||
# fields for the passkey registration ceremony and error messages. The form POSTs to +url+ and
|
||||
# includes hidden fields for +client_data_json+, +attestation_object+, and +transports+ —
|
||||
# populated by the web component after the browser credential API resolves.
|
||||
@@ -28,20 +28,20 @@ module ActionPack::Passkey::FormHelper
|
||||
# - +cancellation+: HTML attributes for the cancellation message +<div>+. Supports a
|
||||
# +:message+ key to override the default cancellation text
|
||||
# - All other options are passed to the +<button>+ tag
|
||||
def passkey_creation_button(name = nil, url = nil, **options, &block)
|
||||
def passkey_registration_button(name = nil, url = nil, **options, &block)
|
||||
url, name = name, block ? capture(&block) : nil if block_given?
|
||||
component_options, form_options, button_options, error_options = extract_passkey_component_options(url, options)
|
||||
error_options[:error][:message] ||= CREATION_ERROR_MESSAGE
|
||||
error_options[:cancellation][:message] ||= CREATION_CANCELLED_MESSAGE
|
||||
error_options[:error][:message] ||= REGISTRATION_ERROR_MESSAGE
|
||||
error_options[:cancellation][:message] ||= REGISTRATION_CANCELLED_MESSAGE
|
||||
param = form_options.delete(:param)
|
||||
|
||||
content_tag("rails-passkey-creation-button", **component_options.transform_keys { |key| key.to_s.dasherize }) do
|
||||
content_tag("rails-passkey-registration-button", **component_options.transform_keys { |key| key.to_s.dasherize }) do
|
||||
tag.form(**form_options) do
|
||||
hidden_field_tag(:authenticity_token, form_authenticity_token) +
|
||||
hidden_field_tag("#{param}[client_data_json]", nil, id: nil, data: { passkey_field: "client_data_json" }) +
|
||||
hidden_field_tag("#{param}[attestation_object]", nil, id: nil, data: { passkey_field: "attestation_object" }) +
|
||||
hidden_field_tag("#{param}[transports][]", nil, id: nil, data: { passkey_field: "transports" }) +
|
||||
tag.button(name, type: :button, data: { passkey: "create" }, **button_options)
|
||||
tag.button(name, type: :button, data: { passkey: "register" }, **button_options)
|
||||
end + passkey_error_messages(**error_options)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
# This sets up a polymorphic +has_many :passkeys+ association and defines two methods on the
|
||||
# model that supply holder-specific options for the WebAuthn ceremonies:
|
||||
#
|
||||
# - +passkey_creation_options+ — merged into ActionPack::Passkey.creation_options
|
||||
# - +passkey_registration_options+ — merged into ActionPack::Passkey.registration_options
|
||||
# - +passkey_request_options+ — merged into ActionPack::Passkey.request_options
|
||||
#
|
||||
# == Options
|
||||
@@ -31,7 +31,7 @@
|
||||
# For more complex configuration, pass a block that receives a ActionPack::Passkey::Holder::Config:
|
||||
#
|
||||
# has_passkeys do |config|
|
||||
# config.creation_options { { name: email, display_name: name } }
|
||||
# config.registration_options { { name: email, display_name: name } }
|
||||
# config.request_options { { user_verification: "required" } }
|
||||
# end
|
||||
module ActionPack::Passkey::Holder
|
||||
@@ -39,7 +39,7 @@ module ActionPack::Passkey::Holder
|
||||
|
||||
class_methods do
|
||||
# Declares that this model can hold passkeys. Sets up a polymorphic +has_many+ association
|
||||
# and defines +passkey_creation_options+ and +passkey_request_options+ instance methods used
|
||||
# and defines +passkey_registration_options+ and +passkey_request_options+ instance methods used
|
||||
# by ActionPack::Passkey to build ceremony options.
|
||||
#
|
||||
# Keyword arguments matching CreationOptions or RequestOptions fields are extracted and
|
||||
@@ -54,11 +54,11 @@ module ActionPack::Passkey::Holder
|
||||
dependent: config.dependent,
|
||||
class_name: "ActionPack::Passkey"
|
||||
|
||||
define_method(:passkey_creation_options) do
|
||||
define_method(:passkey_registration_options) do
|
||||
{
|
||||
id: id,
|
||||
exclude_credentials: public_send(config.association_name)
|
||||
}.merge(config.evaluate_creation_options(self))
|
||||
}.merge(config.evaluate_registration_options(self))
|
||||
end
|
||||
|
||||
define_method(:passkey_request_options) do
|
||||
@@ -77,7 +77,7 @@ module ActionPack::Passkey::Holder
|
||||
@dependent = options.delete(:dependent) || :destroy
|
||||
|
||||
if creation_opts = extract_options_for(ActionPack::WebAuthn::PublicKeyCredential::CreationOptions, options)
|
||||
@creation_options = options_to_proc(creation_opts)
|
||||
@registration_options = options_to_proc(creation_opts)
|
||||
end
|
||||
|
||||
if request_opts = extract_options_for(ActionPack::WebAuthn::PublicKeyCredential::RequestOptions, options)
|
||||
@@ -94,9 +94,9 @@ module ActionPack::Passkey::Holder
|
||||
|
||||
# Sets a block to evaluate in the holder's context to produce additional creation options.
|
||||
#
|
||||
# config.creation_options { { name: email, display_name: name } }
|
||||
def creation_options(&block)
|
||||
@creation_options = block
|
||||
# config.registration_options { { name: email, display_name: name } }
|
||||
def registration_options(&block)
|
||||
@registration_options = block
|
||||
end
|
||||
|
||||
# Evaluates the request options block (if any) in the context of the given +record+. Called
|
||||
@@ -110,10 +110,10 @@ module ActionPack::Passkey::Holder
|
||||
end
|
||||
|
||||
# Evaluates the creation options block (if any) in the context of the given +record+. Called
|
||||
# internally by the +passkey_creation_options+ method defined on the holder.
|
||||
def evaluate_creation_options(record)
|
||||
if @creation_options
|
||||
record.instance_exec(&@creation_options)
|
||||
# internally by the +passkey_registration_options+ method defined on the holder.
|
||||
def evaluate_registration_options(record)
|
||||
if @registration_options
|
||||
record.instance_exec(&@registration_options)
|
||||
else
|
||||
{}
|
||||
end
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
# include ActionPack::Passkey::Request
|
||||
#
|
||||
# def new
|
||||
# @creation_options = passkey_creation_options(holder: Current.user)
|
||||
# @registration_options = passkey_registration_options(holder: Current.user)
|
||||
# end
|
||||
#
|
||||
# def create
|
||||
# @passkey = ActionPack::Passkey.register(
|
||||
# passkey_creation_params, holder: Current.user
|
||||
# passkey_registration_params, holder: Current.user
|
||||
# )
|
||||
# redirect_to settings_path
|
||||
# end
|
||||
@@ -56,7 +56,7 @@ module ActionPack::Passkey::Request
|
||||
end
|
||||
|
||||
# Returns strong parameters for the passkey registration ceremony.
|
||||
def passkey_creation_params(param: :passkey)
|
||||
def passkey_registration_params(param: :passkey)
|
||||
params.expect(param => [ :client_data_json, :attestation_object, transports: [] ])
|
||||
end
|
||||
|
||||
@@ -70,8 +70,8 @@ module ActionPack::Passkey::Request
|
||||
ActionPack::Passkey.request_options(**options)
|
||||
end
|
||||
|
||||
# Returns CreationOptions for the registration ceremony.
|
||||
def passkey_creation_options(**options)
|
||||
ActionPack::Passkey.creation_options(**options)
|
||||
# Returns RegistrationOptions for the registration ceremony.
|
||||
def passkey_registration_options(**options)
|
||||
ActionPack::Passkey.registration_options(**options)
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user