From d8b543bb6794e26bedca3047532daef8e7e29afd Mon Sep 17 00:00:00 2001 From: Vinoth Kannan Date: Wed, 5 Sep 2018 00:46:54 +0530 Subject: [PATCH] FIX: redirect to original URL after social signup --- .../discourse/controllers/create-account.js.es6 | 7 +++++++ app/controllers/users_controller.rb | 2 ++ lib/auth/result.rb | 2 ++ spec/requests/users_controller_spec.rb | 12 ++++++++++++ 4 files changed, 23 insertions(+) diff --git a/app/assets/javascripts/discourse/controllers/create-account.js.es6 b/app/assets/javascripts/discourse/controllers/create-account.js.es6 index a07deba9158..581a2040ffd 100644 --- a/app/assets/javascripts/discourse/controllers/create-account.js.es6 +++ b/app/assets/javascripts/discourse/controllers/create-account.js.es6 @@ -205,6 +205,11 @@ export default Ember.Controller.extend( "accountChallenge" ); const userFields = this.get("userFields"); + const destinationUrl = this.get("authOptions.destination_url"); + + if (!Ember.isEmpty(destinationUrl)) { + $.cookie("destination_url", destinationUrl, { path: '/' }); + } // Add the userfields to the data if (!Ember.isEmpty(userFields)) { @@ -255,10 +260,12 @@ export default Ember.Controller.extend( this.get("rejectedPasswords").pushObject(attrs.accountPassword); } this.set("formSubmitted", false); + $.cookie("destination_url", null); } }, () => { this.set("formSubmitted", false); + $.cookie("destination_url", null); return this.flash(I18n.t("create_account.failed"), "error"); } ); diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 065f89732a8..92a9bd4796c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -675,6 +675,8 @@ class UsersController < ApplicationController if current_user.present? if SiteSetting.enable_sso_provider && payload = cookies.delete(:sso_payload) return redirect_to(session_sso_provider_url + "?" + payload) + elsif destination_url = cookies.delete(:destination_url) + return redirect_to(destination_url) else return redirect_to(path('/')) end diff --git a/lib/auth/result.rb b/lib/auth/result.rb index 9f34d2c62e2..e36d4638bd5 100644 --- a/lib/auth/result.rb +++ b/lib/auth/result.rb @@ -69,6 +69,8 @@ class Auth::Result email_valid: !!email_valid, omit_username: !!omit_username } + result[:destination_url] = destination_url if destination_url.present? + if SiteSetting.enable_names? result[:name] = User.suggest_name(name || username || email) end diff --git a/spec/requests/users_controller_spec.rb b/spec/requests/users_controller_spec.rb index 9956eae29b8..717b8ccdd78 100644 --- a/spec/requests/users_controller_spec.rb +++ b/spec/requests/users_controller_spec.rb @@ -2571,6 +2571,18 @@ describe UsersController do expect(response).to redirect_to("/") end + context 'when cookies contains a destination URL' do + it 'should redirect to the URL' do + sign_in(Fabricate(:user)) + destination_url = 'http://thisisasite.com/somepath' + cookies[:destination_url] = destination_url + + get "/u/account-created" + + expect(response).to redirect_to(destination_url) + end + end + context "when the user account is created" do include ApplicationHelper