summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAkinori MUSHA <knu@idaemons.org>2017-05-26 21:14:03 +0900
committerEugen Rochko <eugen@zeonfederated.com>2017-05-26 14:14:03 +0200
commitf6a93fc15022b8c5ac6574b8918a2ec1a54c6040 (patch)
treea834f01768592c6c4155edde362d332533c8c603
parent019f3377bbf845fcb97b55ab14c903c17e79a803 (diff)
Go to root after login in single user mode (#3289)
In single user mode, visitors are redirected to the single user's profile page. So, if you are the owner without a session, you start from that page, click the login button and authenticate yourself expecting you'll soon get started with the home page, but in reality you'll get redirected back to where you started from -- your own profile page. This fixes the behavior by redirecting you home after login if you have started from your own profile page.
-rw-r--r--app/controllers/auth/sessions_controller.rb14
-rw-r--r--spec/controllers/auth/sessions_controller_spec.rb24
2 files changed, 36 insertions, 2 deletions
diff --git a/app/controllers/auth/sessions_controller.rb b/app/controllers/auth/sessions_controller.rb
index 1aa84a35483..f399c6f492c 100644
--- a/app/controllers/auth/sessions_controller.rb
+++ b/app/controllers/auth/sessions_controller.rb
@@ -35,10 +35,10 @@ class Auth::SessionsController < Devise::SessionsController
params.require(:user).permit(:email, :password, :otp_attempt)
end
- def after_sign_in_path_for(_resource)
+ def after_sign_in_path_for(resource)
last_url = stored_location_for(:user)
- if [about_path].include?(last_url)
+ if home_paths(resource).include?(last_url)
root_path
else
last_url || root_path
@@ -81,4 +81,14 @@ class Auth::SessionsController < Devise::SessionsController
session[:otp_user_id] = user.id
render :two_factor
end
+
+ private
+
+ def home_paths(resource)
+ paths = [about_path]
+ if single_user_mode? && resource.is_a?(User)
+ paths << short_account_path(username: resource.account)
+ end
+ paths
+ end
end
diff --git a/spec/controllers/auth/sessions_controller_spec.rb b/spec/controllers/auth/sessions_controller_spec.rb
index a2298180afc..525b8254d27 100644
--- a/spec/controllers/auth/sessions_controller_spec.rb
+++ b/spec/controllers/auth/sessions_controller_spec.rb
@@ -92,6 +92,30 @@ RSpec.describe Auth::SessionsController, type: :controller do
expect(flash[:alert]).to eq(I18n.t('devise.failure.unconfirmed', locale: accept_language))
end
end
+
+ context "logging in from the user's page" do
+ before do
+ allow(controller).to receive(:single_user_mode?).and_return(single_user_mode)
+ allow(controller).to receive(:stored_location_for).with(:user).and_return("/@#{user.account.username}")
+ post :create, params: { user: { email: user.email, password: user.password } }
+ end
+
+ context "in single user mode" do
+ let(:single_user_mode) { true }
+
+ it 'redirects to home' do
+ expect(response).to redirect_to(root_path)
+ end
+ end
+
+ context "in non-single user mode" do
+ let(:single_user_mode) { false }
+
+ it "redirects back to the user's page" do
+ expect(response).to redirect_to(short_account_path(username: user.account))
+ end
+ end
+ end
end
context 'using two-factor authentication' do