Refactor PasswordsController to use before_actions

This commit is contained in:
Robert Speicher 2015-10-01 21:47:27 -04:00
parent c7b43126bd
commit b8ff38b1d4
2 changed files with 22 additions and 22 deletions

View File

@ -1,21 +1,7 @@
class PasswordsController < Devise::PasswordsController
def create
email = resource_params[:email]
self.resource = resource_class.find_by_email(email)
if resource && resource.ldap_user?
flash[:alert] = "Cannot reset password for LDAP user."
respond_with({}, location: after_sending_reset_password_instructions_path_for(resource_name)) and return
end
unless can_send_reset_email?
flash[:alert] = "Instructions about how to reset your password have already been sent recently. Please wait a few minutes to try again."
respond_with({}, location: new_password_path(resource_name)) and return
end
super
end
before_action :resource_from_email, only: [:create]
before_action :prevent_ldap_reset, only: [:create]
before_action :throttle_reset, only: [:create]
def edit
super
@ -37,10 +23,24 @@ class PasswordsController < Devise::PasswordsController
end
end
private
protected
def can_send_reset_email?
resource && (resource.reset_password_sent_at.blank? ||
resource.reset_password_sent_at < 1.minute.ago)
def resource_from_email
email = resource_params[:email]
self.resource = resource_class.find_by_email(email)
end
def prevent_ldap_reset
return unless resource && resource.ldap_user?
redirect_to after_sending_reset_password_instructions_path_for(resource_name),
alert: "Cannot reset password for LDAP user."
end
def throttle_reset
return unless resource && resource.recently_sent_password_reset?
redirect_to new_password_path(resource_name),
alert: I18n.t('devise.passwords.recently_reset')
end
end

View File

@ -29,7 +29,7 @@ feature 'Password reset', feature: true do
visit root_path
forgot_password(user)
expect(page).to have_content("Instructions about how to reset your password have already been sent recently. Please wait a few minutes to try again.")
expect(page).to have_content(I18n.t('devise.passwords.recently_reset'))
expect(current_path).to eq new_user_password_path
end
end