From e2d82b882ed55bf74325fb24e772961b1bb1833a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Hanol?= Date: Fri, 26 Jan 2018 18:52:27 +0100 Subject: [PATCH] FIX: redirect to original URL after social login --- app/assets/javascripts/discourse/controllers/login.js.es6 | 2 +- app/controllers/users/omniauth_callbacks_controller.rb | 5 ++++- lib/auth/result.rb | 6 ++++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/assets/javascripts/discourse/controllers/login.js.es6 b/app/assets/javascripts/discourse/controllers/login.js.es6 index c524939435b..6eb266d98f2 100644 --- a/app/assets/javascripts/discourse/controllers/login.js.es6 +++ b/app/assets/javascripts/discourse/controllers/login.js.es6 @@ -217,7 +217,7 @@ export default Ember.Controller.extend(ModalFunctionality, { // Reload the page if we're authenticated if (options.authenticated) { - const destinationUrl = $.cookie('destination_url'); + const destinationUrl = $.cookie('destination_url') || options.destination_url; if (destinationUrl) { // redirect client to the original URL $.cookie('destination_url', null); diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 04ccf5fdf0d..afebf58eb8f 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -41,6 +41,7 @@ class Users::OmniauthCallbacksController < ApplicationController @auth_result = authenticator.after_authenticate(auth) origin = request.env['omniauth.origin'] + if cookies[:destination_url].present? origin = cookies[:destination_url] cookies.delete(:destination_url) @@ -53,8 +54,10 @@ class Users::OmniauthCallbacksController < ApplicationController end end - unless @origin.present? + if @origin.blank? @origin = Discourse.base_uri("/") + else + @auth_result.destination_url = origin end if @auth_result.failed? diff --git a/lib/auth/result.rb b/lib/auth/result.rb index 35204bb7e35..911dca0a28b 100644 --- a/lib/auth/result.rb +++ b/lib/auth/result.rb @@ -4,7 +4,7 @@ class Auth::Result :awaiting_approval, :authenticated, :authenticator_name, :requires_invite, :not_allowed_from_ip_address, :admin_not_allowed_from_ip_address, :omit_username, - :skip_email_validation + :skip_email_validation, :destination_url attr_accessor( :failed, @@ -42,13 +42,15 @@ class Auth::Result date: I18n.l(user.suspended_till, format: :date_only), reason: user.suspend_reason) } else - { + result = { authenticated: !!authenticated, awaiting_activation: !!awaiting_activation, awaiting_approval: !!awaiting_approval, not_allowed_from_ip_address: !!not_allowed_from_ip_address, admin_not_allowed_from_ip_address: !!admin_not_allowed_from_ip_address } + result[:destination_url] = destination_url if authenticated && destination_url.present? + result end else result = { email: email,