diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 4a9b0916e2f..138481eca07 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 0cb2d54a400..1ed3284971c 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