Class: Unmagic::Passkeys::WebAuthn::PublicKeyCredential::RequestOptions

Inherits:
Options
  • Object
show all
Defined in:
lib/unmagic/passkeys/web_authn/public_key_credential/request_options.rb

Overview

Action Pack WebAuthn Public Key Credential Request Options

Generates options for the WebAuthn authentication ceremony (using an existing credential). These options are passed to navigator.credentials.get() in the browser to prompt the user to authenticate with a registered authenticator.

Usage

options = Unmagic::Passkeys::WebAuthn::PublicKeyCredential::RequestOptions.new(
  credentials: current_user.webauthn_credentials
)

# In your controller, return as JSON for the JavaScript WebAuthn API
render json: { publicKey: options.as_json }

Attributes

credentials

A collection of credential records for the user. Each credential must respond to id returning the Base64URL-encoded credential ID, and transports returning an array of transport strings.

relying_party

The relying party (your application) configuration. Defaults to Unmagic::Passkeys::WebAuthn.relying_party.

Constant Summary

Constants inherited from Options

Options::CHALLENGE_LENGTH, Options::USER_VERIFICATION_OPTIONS

Instance Method Summary collapse

Methods inherited from Options

#challenge, #inspect, #validate!

Constructor Details

#initialize(attributes = {}) ⇒ RequestOptions

Returns a new instance of RequestOptions.



31
32
33
34
# File 'lib/unmagic/passkeys/web_authn/public_key_credential/request_options.rb', line 31

def initialize(attributes = {})
  super
  validate!
end

Instance Method Details

#as_json(options = {}) ⇒ Object

Returns a Hash suitable for JSON serialization and passing to the WebAuthn JavaScript API.



38
39
40
41
42
43
44
45
46
47
# File 'lib/unmagic/passkeys/web_authn/public_key_credential/request_options.rb', line 38

def as_json(options = {})
  json = {
    challenge: challenge,
    rpId: relying_party.id,
    allowCredentials: credentials.map { |credential| allow_credential_json(credential) },
    userVerification: user_verification.to_s
  }

  json.as_json(options)
end