diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 8ff1ba52dc2..04ccf5fdf0d 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -117,6 +117,7 @@ class Users::OmniauthCallbacksController < ApplicationController # ensure there is an active email token user.email_tokens.create(email: user.email) unless EmailToken.where(email: user.email, confirmed: true).present? || user.email_tokens.active.where(email: user.email).exists? user.activate + user.update!(registration_ip_address: request.remote_ip) if user.registration_ip_address.blank? end if ScreenedIpAddress.should_block?(request.remote_ip) diff --git a/spec/requests/omniauth_callbacks_controller_spec.rb b/spec/requests/omniauth_callbacks_controller_spec.rb index 966e2f40898..20ca66324b4 100644 --- a/spec/requests/omniauth_callbacks_controller_spec.rb +++ b/spec/requests/omniauth_callbacks_controller_spec.rb @@ -89,6 +89,26 @@ RSpec.describe Users::OmniauthCallbacksController do expect(user.email_confirmed?).to eq(true) end + it "should activate/unstage staged user" do + user.update!(staged: true, registration_ip_address: nil) + + user.reload + expect(user.staged).to eq(true) + expect(user.registration_ip_address).to eq(nil) + + events = DiscourseEvent.track_events do + get "/auth/google_oauth2/callback.json" + end + + expect(events.map { |event| event[:event_name] }).to include(:user_logged_in, :user_first_logged_in) + + expect(response).to be_success + + user.reload + expect(user.staged).to eq(false) + expect(user.registration_ip_address).to be_present + end + context 'when user has not verified his email' do before do GoogleUserInfo.create!(google_user_id: '12345', user: user)