From 12cdbc385f725a25926a61153f9e4df929e5e62d Mon Sep 17 00:00:00 2001 From: Kai Wagner Date: Wed, 18 Feb 2026 15:28:30 +0100 Subject: [PATCH] adding last_login_at on sign-in, so it can be used in the admin view and elsewhere later. Also added the overall user count Signed-off-by: Kai Wagner --- app/assets/stylesheets/components/settings.css | 6 ++++++ app/controllers/admin/users_controller.rb | 1 + app/controllers/omniauth_callbacks_controller.rb | 1 + app/controllers/sessions_controller.rb | 1 + app/controllers/verifications_controller.rb | 1 + app/views/admin/users/index.html.slim | 7 ++++++- db/migrate/20260218120000_add_last_login_at_to_users.rb | 5 +++++ 7 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 db/migrate/20260218120000_add_last_login_at_to_users.rb diff --git a/app/assets/stylesheets/components/settings.css b/app/assets/stylesheets/components/settings.css index 3ef415d..100cbdf 100644 --- a/app/assets/stylesheets/components/settings.css +++ b/app/assets/stylesheets/components/settings.css @@ -8,6 +8,12 @@ margin-bottom: var(--spacing-8); } +.settings-page .settings-page-count { + font-weight: var(--font-weight-regular); + color: var(--color-text-muted); + margin-left: var(--spacing-2); +} + .settings-section { padding: var(--spacing-6) 0; border-bottom: var(--border-width) solid var(--color-border); diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index fdc6dac..dcfc154 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -8,6 +8,7 @@ def active_admin_section end def index + @users_total_count = User.active.count @users = User.active .includes(person: [ :default_alias, :aliases ]) .order(created_at: :desc) diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb index 7c8c506..8bbee50 100644 --- a/app/controllers/omniauth_callbacks_controller.rb +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -91,6 +91,7 @@ def google_oauth2 reset_session session[:user_id] = identity.user_id + identity.user.update_columns(last_login_at: Time.current) redirect_to root_path, notice: "Signed in with Google" rescue => e Rails.logger.error("OIDC error: #{e.class}: #{e.message}") diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 35501bc..e00e769 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -21,6 +21,7 @@ def create else reset_session session[:user_id] = user.id + user.update_columns(last_login_at: Time.current) redirect_to root_path, notice: "Signed in successfully" end end diff --git a/app/controllers/verifications_controller.rb b/app/controllers/verifications_controller.rb index 9202d8a..079e98c 100644 --- a/app/controllers/verifications_controller.rb +++ b/app/controllers/verifications_controller.rb @@ -71,6 +71,7 @@ def handle_register(token) reset_session session[:user_id] = user.id + user.update_columns(last_login_at: Time.current) redirect_to root_path, notice: "Registration complete. You are signed in." end diff --git a/app/views/admin/users/index.html.slim b/app/views/admin/users/index.html.slim index a68cf0a..128b448 100644 --- a/app/views/admin/users/index.html.slim +++ b/app/views/admin/users/index.html.slim @@ -1,7 +1,10 @@ - content_for :title, "Admin — Users" .settings-page - h1 Users + h1 + | Users + - if @users_total_count + span.settings-page-count = "(#{@users_total_count})" .email-table-wrap table.email-table @@ -11,6 +14,7 @@ th Emails th Admin th Created + th Last login th Actions tbody - @users.each do |user| @@ -41,5 +45,6 @@ = button_to toggle_admin_admin_user_path(user), method: :post, class: "button-secondary button-small", data: { turbo_confirm: "#{user.admin? ? 'Remove' : 'Grant'} admin privileges for #{user.username}?" } do = user.admin? ? "Remove admin" : "Make admin" td = user.created_at.strftime('%Y-%m-%d') + td = user.last_login_at ? smart_time_display(user.last_login_at) : "—" td = link_to "Add email", new_email_admin_user_path(user), class: "button-secondary button-small" diff --git a/db/migrate/20260218120000_add_last_login_at_to_users.rb b/db/migrate/20260218120000_add_last_login_at_to_users.rb new file mode 100644 index 0000000..2e6d493 --- /dev/null +++ b/db/migrate/20260218120000_add_last_login_at_to_users.rb @@ -0,0 +1,5 @@ +class AddLastLoginAtToUsers < ActiveRecord::Migration[7.1] + def change + add_column :users, :last_login_at, :datetime + end +end