Class: Devise::Strategies::PasskeyAuthenticatable

Inherits:
Base
  • Object
show all
Defined in:
lib/devise/strategies/passkey_authenticatable.rb

Instance Method Summary collapse

Instance Method Details

#authenticate!Object

rubocop:disable Metrics/AbcSize



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/devise/strategies/passkey_authenticatable.rb', line 10

def authenticate! # rubocop:disable Metrics/AbcSize
  passkey_from_params = WebAuthn::Credential.from_get(JSON.parse(passkey_param))

  return fail!(:passkey_not_found) if passkey_from_params.user_handle.nil?

  resource = resource_class.find_by(webauthn_id: passkey_from_params.user_handle)
  stored_passkey = resource&.passkeys&.find_by(external_id: passkey_from_params.id)

  return fail!(:passkey_not_found) if stored_passkey.blank?

  verify_passkeys(passkey_from_params, stored_passkey)

  remember_me(resource)
  success!(resource)
rescue WebAuthn::Error
  fail!(:passkey_verification_failed)
ensure
  session.delete(:authentication_challenge)
end

#valid?Boolean

Returns:

  • (Boolean)


6
7
8
# File 'lib/devise/strategies/passkey_authenticatable.rb', line 6

def valid?
  passkey_param.present? && session[:authentication_challenge].present?
end