DEV: Let OmniAuth strategies return auth result. (#7833)

DEV: Let OmniAuth strategies return auth result. (#7833)

diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb
index 4a9b091..138481e 100644
--- a/app/controllers/users/omniauth_callbacks_controller.rb
+++ b/app/controllers/users/omniauth_callbacks_controller.rb
@@ -19,6 +19,15 @@ class Users::OmniauthCallbacksController < ApplicationController
   skip_before_action :verify_authenticity_token, only: :complete
 
   def complete
+    if result = request.env["omniauth.result"]
+      @auth_result = result
+
+      return respond_to do |format|
+        format.html
+        format.json { render json: @auth_result.to_client_hash }
+      end
+    end
+
     auth = request.env["omniauth.auth"]
     raise Discourse::NotFound unless request.env["omniauth.auth"]
 
diff --git a/spec/requests/omniauth_callbacks_controller_spec.rb b/spec/requests/omniauth_callbacks_controller_spec.rb
index 0cb2d54..1ed3284 100644
--- a/spec/requests/omniauth_callbacks_controller_spec.rb
+++ b/spec/requests/omniauth_callbacks_controller_spec.rb
@@ -12,6 +12,7 @@ RSpec.describe Users::OmniauthCallbacksController do
 
   after do
     Rails.application.env_config["omniauth.auth"] = OmniAuth.config.mock_auth[:google_oauth2] = nil
+    Rails.application.env_config["omniauth.result"] = nil
     OmniAuth.config.test_mode = false
   end
 
@@ -79,6 +80,25 @@ RSpec.describe Users::OmniauthCallbacksController do
     end
   end
 
+  describe '.complete' do
+    it 'will return result if present' do
+      result = Auth::Result.new
+      result.user = Fabricate(:user)
+      result.authenticated = true
+      result.destination_url = "/anotherpath"
+
+      Rails.application.env_config["omniauth.origin"] = '/somepath'
+      Rails.application.env_config["omniauth.result"] = result
+
+      get "/auth/test/callback.json"
+      response_body = JSON.parse(response.body)
+
+      expect(response.status).to eq(200)
+      expect(response_body["authenticated"]).to eq(true)
+      expect(response_body["destination_url"]).to eq("/anotherpath")
+    end
+  end
+
   context 'Google Oauth2' do
     before do
       SiteSetting.enable_google_oauth2_logins = true

GitHub sha: dc5eb765

Revert "DEV: Let OmniAuth strategies return auth result. (#7833)"