diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 4ba32a442..676eb6bb7 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -145,14 +145,14 @@ private def user_params if @user == current_user if current_user.data_coordinator? || current_user.support? - params.require(:user).permit(:email, :name, :password, :password_confirmation, :role, :is_dpo, :is_key_contact) + params.require(:user).permit(:email, :name, :password, :password_confirmation, :role, :is_dpo, :is_key_contact, :initial_confirmation_sent) else - params.require(:user).permit(:email, :name, :password, :password_confirmation) + params.require(:user).permit(:email, :name, :password, :password_confirmation, :initial_confirmation_sent) end elsif current_user.data_coordinator? - params.require(:user).permit(:email, :name, :role, :is_dpo, :is_key_contact, :active) + params.require(:user).permit(:email, :name, :role, :is_dpo, :is_key_contact, :active, :initial_confirmation_sent) elsif current_user.support? - params.require(:user).permit(:email, :name, :role, :is_dpo, :is_key_contact, :organisation_id, :active) + params.require(:user).permit(:email, :name, :role, :is_dpo, :is_key_contact, :organisation_id, :active, :initial_confirmation_sent) end end diff --git a/app/models/user.rb b/app/models/user.rb index 8eea9c356..cee5f9550 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -109,10 +109,11 @@ class User < ApplicationRecord USER_REACTIVATED_TEMPLATE_ID elsif was_migrated_from_softwire? && last_sign_in_at.blank? BETA_ONBOARDING_TEMPLATE_ID - elsif confirmation_sent_at.present? + elsif initial_confirmation_sent RECONFIRMABLE_TEMPLATE_ID else CONFIRMABLE_TEMPLATE_ID + update!(initial_confirmation_sent: true) end end diff --git a/app/views/devise/confirmations/new.html.erb b/app/views/devise/confirmations/new.html.erb index 0b013b3e7..5f36dc388 100644 --- a/app/views/devise/confirmations/new.html.erb +++ b/app/views/devise/confirmations/new.html.erb @@ -9,7 +9,6 @@

For security reasons, your join link expired - get another one using the button below (valid for 3 hours).

- <%= f.hidden_field :email, value: (resource.pending_reconfirmation? ? resource.unconfirmed_email : resource.email) %> <%= f.govuk_submit "Get a new join link" %> <% end %> diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 63389432d..8be678a7f 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -152,7 +152,7 @@ Devise.setup do |config| # their account can't be confirmed with the token any more. # Default is nil, meaning there is no restriction on how long a user can take # before confirming their account. - config.confirm_within = 3.hours + config.confirm_within = 3.seconds # If true, requires any email changes to be confirmed (exactly the same way as # initial account confirmation) to be applied. Requires additional unconfirmed_email diff --git a/db/migrate/20230203174815_add_initial_confirmation_sent_to_users.rb b/db/migrate/20230203174815_add_initial_confirmation_sent_to_users.rb new file mode 100644 index 000000000..8f7fcaf66 --- /dev/null +++ b/db/migrate/20230203174815_add_initial_confirmation_sent_to_users.rb @@ -0,0 +1,5 @@ +class AddInitialConfirmationSentToUsers < ActiveRecord::Migration[7.0] + def change + add_column :users, :initial_confirmation_sent, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index d107bad1e..7c222f80c 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_01_27_102334) do +ActiveRecord::Schema[7.0].define(version: 2023_02_03_174815) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -582,6 +582,7 @@ ActiveRecord::Schema[7.0].define(version: 2023_01_27_102334) do t.datetime "confirmed_at", precision: nil t.datetime "confirmation_sent_at", precision: nil t.string "unconfirmed_email" + t.boolean "initial_confirmation_sent" t.index ["confirmation_token"], name: "index_users_on_confirmation_token", unique: true t.index ["email"], name: "index_users_on_email", unique: true t.index ["encrypted_otp_secret_key"], name: "index_users_on_encrypted_otp_secret_key", unique: true