diff --git a/app/controllers/concerns/authenticator.rb b/app/controllers/concerns/authenticator.rb index bf2534f9..b6c3dbfa 100644 --- a/app/controllers/concerns/authenticator.rb +++ b/app/controllers/concerns/authenticator.rb @@ -24,6 +24,7 @@ module Authenticator migrate_twitter_user(user) session[:user_id] = user.id + user.update(last_login: Time.zone.now) logger.info("Support: #{user.email} has successfully logged in.") diff --git a/db/migrate/20201214232153_add_last_login_to_users.rb b/db/migrate/20201214232153_add_last_login_to_users.rb new file mode 100644 index 00000000..e4ea63e5 --- /dev/null +++ b/db/migrate/20201214232153_add_last_login_to_users.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class AddLastLoginToUsers < ActiveRecord::Migration[5.2] + def change + add_column :users, :last_login, :datetime + end +end diff --git a/db/schema.rb b/db/schema.rb index 13d6c35d..dbc2924a 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.define(version: 2020_06_15_190507) do +ActiveRecord::Schema.define(version: 2020_12_14_232153) do create_table "active_storage_attachments", force: :cascade do |t| t.string "name", null: false @@ -142,6 +142,7 @@ ActiveRecord::Schema.define(version: 2020_06_15_190507) do t.datetime "activated_at" t.boolean "deleted", default: false, null: false t.integer "role_id" + t.datetime "last_login" t.index ["created_at"], name: "index_users_on_created_at" t.index ["deleted"], name: "index_users_on_deleted" t.index ["email"], name: "index_users_on_email" diff --git a/spec/controllers/sessions_controller_spec.rb b/spec/controllers/sessions_controller_spec.rb index ec80de43..8b7a5c71 100644 --- a/spec/controllers/sessions_controller_spec.rb +++ b/spec/controllers/sessions_controller_spec.rb @@ -272,6 +272,19 @@ describe SessionsController, type: :controller do } }.to change { ActionMailer::Base.deliveries.count }.by(1) end + + it "correctly sets the last_login field after the user is created" do + post :create, params: { + session: { + email: @user1.email, + password: 'example', + }, + } + + @user1.reload + + expect(@user1.last_login).to_not be_nil + end end describe "GET/POST #omniauth" do @@ -372,6 +385,15 @@ describe SessionsController, type: :controller do expect(response).to redirect_to(root_path) end + it "correctly sets the last_login field after the user is created" do + request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:google] + get :omniauth, params: { provider: :google } + + u = User.last + + expect(u.last_login).to_not be_nil + end + context 'twitter deprecation' do it "should not allow new user sign up with omniauth twitter" do request.env["omniauth.auth"] = OmniAuth.config.mock_auth[:twitter] diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb index c86e306c..2d70b11a 100644 --- a/spec/controllers/users_controller_spec.rb +++ b/spec/controllers/users_controller_spec.rb @@ -139,6 +139,15 @@ describe UsersController, type: :controller do expect(flash[:success]).to be_present expect(response).to redirect_to(root_path) end + + it "correctly sets the last_login field after the user is created" do + params = random_valid_user_params + post :create, params: params + + u = User.find_by(name: params[:user][:name], email: params[:user][:email]) + + expect(u.last_login).to_not be_nil + end end context "disallow greenlight accounts" do