Change confirmations controller to redirect to / for approved users (#16151)
Clicking the confirmation link multiple times currently leads to entering account settings, which can be confusing. This commit changes that so that it redirects to the root path, so it behaves the same way as clicking only once in most cases.gh/stable
parent
09bb92875d
commit
8c44b723bb
|
@ -17,7 +17,9 @@ class Auth::ConfirmationsController < Devise::ConfirmationsController
|
||||||
private
|
private
|
||||||
|
|
||||||
def require_unconfirmed!
|
def require_unconfirmed!
|
||||||
redirect_to edit_user_registration_path if user_signed_in? && current_user.confirmed? && current_user.unconfirmed_email.blank?
|
if user_signed_in? && current_user.confirmed? && current_user.unconfirmed_email.blank?
|
||||||
|
redirect_to(current_user.approved? ? root_path : edit_user_registration_path)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def set_body_classes
|
def set_body_classes
|
||||||
|
|
|
@ -32,6 +32,52 @@ describe Auth::ConfirmationsController, type: :controller do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context 'when user is unconfirmed and unapproved' do
|
||||||
|
let!(:user) { Fabricate(:user, confirmation_token: 'foobar', confirmed_at: nil, approved: false) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(BootstrapTimelineWorker).to receive(:perform_async)
|
||||||
|
@request.env['devise.mapping'] = Devise.mappings[:user]
|
||||||
|
get :show, params: { confirmation_token: 'foobar' }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to login' do
|
||||||
|
expect(response).to redirect_to(new_user_session_path)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when user is already confirmed' do
|
||||||
|
let!(:user) { Fabricate(:user) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(BootstrapTimelineWorker).to receive(:perform_async)
|
||||||
|
@request.env['devise.mapping'] = Devise.mappings[:user]
|
||||||
|
sign_in(user, scope: :user)
|
||||||
|
get :show, params: { confirmation_token: 'foobar' }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to root path' do
|
||||||
|
expect(response).to redirect_to(root_path)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when user is already confirmed but unapproved' do
|
||||||
|
let!(:user) { Fabricate(:user, approved: false) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
allow(BootstrapTimelineWorker).to receive(:perform_async)
|
||||||
|
@request.env['devise.mapping'] = Devise.mappings[:user]
|
||||||
|
user.approved = false
|
||||||
|
user.save!
|
||||||
|
sign_in(user, scope: :user)
|
||||||
|
get :show, params: { confirmation_token: 'foobar' }
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'redirects to settings' do
|
||||||
|
expect(response).to redirect_to(edit_user_registration_path)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context 'when user is updating email' do
|
context 'when user is updating email' do
|
||||||
let!(:user) { Fabricate(:user, confirmation_token: 'foobar', unconfirmed_email: 'new-email@example.com') }
|
let!(:user) { Fabricate(:user, confirmation_token: 'foobar', unconfirmed_email: 'new-email@example.com') }
|
||||||
|
|
||||||
|
|
Reference in New Issue