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.
这个提交存在于:
父节点
09bb92875d
当前提交
8c44b723bb
共有 2 个文件被更改,包括 49 次插入 和 1 次删除
|
|
@ -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') }
|
||||||
|
|
||||||
|
|
|
||||||
正在加载…
添加表格
在新工单中引用