diff --git a/CHANGELOG.md b/CHANGELOG.md index 2976023..483eed0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Added - Dispatch `webauthn:unsupported` for browsers missing `parseOptionsFromJSON`. [#127](https://github.com/cedarcode/devise-webauthn/pull/127) [@santiagorodriguez96] +- Scope `login_with_passkey_form_for` to the Devise resource so that form builder fields (e.g. `f.check_box :remember_me`) are properly namespaced (e.g. `account[remember_me]`). [#134](https://github.com/cedarcode/devise-webauthn/pull/134) [@RenzoMinelli] ### Changed diff --git a/lib/devise/webauthn/helpers/credentials_helper.rb b/lib/devise/webauthn/helpers/credentials_helper.rb index 122e8cf..58b6f8c 100644 --- a/lib/devise/webauthn/helpers/credentials_helper.rb +++ b/lib/devise/webauthn/helpers/credentials_helper.rb @@ -15,11 +15,13 @@ def passkey_creation_form_for(resource_or_resource_name, **options, &block) end def login_with_passkey_form_for(resource_or_resource_name, **options, &block) + scope = Devise::Mapping.find_scope!(resource_or_resource_name) + form_with( - **options, url: session_path(resource_or_resource_name), method: :post + **options, scope: scope, url: session_path(resource_or_resource_name), method: :post ) do |f| tag.webauthn_get(data: { options_url: passkey_authentication_options_path(resource_or_resource_name) }) do - concat f.hidden_field(:public_key_credential, data: { webauthn_target: "response" }) + concat hidden_field_tag(:public_key_credential, nil, data: { webauthn_target: "response" }) concat capture(f, &block) end end diff --git a/spec/helpers/devise/webauthn/credentials_helper_spec.rb b/spec/helpers/devise/webauthn/credentials_helper_spec.rb index e44db4c..3c41ed2 100644 --- a/spec/helpers/devise/webauthn/credentials_helper_spec.rb +++ b/spec/helpers/devise/webauthn/credentials_helper_spec.rb @@ -101,8 +101,8 @@ def have_hidden_credential_field page = parse(html) expect(page).to have_css("input.btn-primary[type='submit']") - expect(page).to have_css("input[type='checkbox'][name='remember_me']") - expect(page).to have_css("label[for='remember_me']", text: "Remember me") + expect(page).to have_css("input[type='checkbox'][name='account[remember_me]']") + expect(page).to have_css("label[for='account_remember_me']", text: "Remember me") end end diff --git a/spec/internal/app/views/devise/sessions/new.html.erb b/spec/internal/app/views/devise/sessions/new.html.erb index 1fefefd..d5ba7b2 100644 --- a/spec/internal/app/views/devise/sessions/new.html.erb +++ b/spec/internal/app/views/devise/sessions/new.html.erb @@ -25,8 +25,8 @@ <%= login_with_passkey_form_for(resource_name, id: "passkey-login") do |form| %>