2012-05-18 2 views
2

Разработать проверку подлинности в Rails.Настройка аутентификации регистрируется после изменения пароля

Как предотвратить автоматическую регистрацию после изменения пароля по ссылке «забыл пароль»?

В идеале было бы неплохо отобразить страницу с сообщением «Новый пароль был сохранен».

ответ

4

Вам необходимо переопределить passwords_controller Devise, который вы можете увидеть по умолчанию для here. Во-первых, создать свой собственный контроллер, который унаследует от контроллера DEViSE:

class User::PasswordsController < Devise::PasswordsController

После того, как у вас есть контроллер готов, добавить все другие методы, которые вы не хотите, чтобы переопределить, а просто позвонить супер внутри из них. Это будут методы new, edit и create. Также не забудьте добавить защищенный метод after_sending_reset_password_instructions_path_for(resource_name).

Способ, которым вы занимаетесь переопределением, является действием update.

def update 
    self.resource = resource_class.reset_password_by_token(resource_params) 

    if resource.errors.empty? 
    flash_message = resource.active_for_authentication? ? :updated : :updated_not_active 
    set_flash_message(:notice, "Your flash message here") 
    redirect_to new_user_session_path 
    else 
    respond_with resource 
    end 
end 

Все мы изменим здесь, чтобы удалить строку для входа пользователя с перенаправлением на страницу входа в, а затем установить наш пользовательский флэш-сообщение.

Наконец, вы должны сказать изобрести, чтобы использовать новый контроллер, поэтому в routes.rb изменения devise_for :users к:

devise_for :users, :controllers => { :passwords => 'users/passwords' } 

И что должны это сделать.

0

Вышеуказанный ответ правильный, но дело в том, что оно зависит от версии для разработки. Я следил за сказанным выше, и я не мог заставить его работать, и через некоторое время я обнаружил, что использую версию для разработки, которая не поддерживает метод resource_params, а затем я попытался использовать другую для этой версии и получил ее работу.

2

Вот обновление на основе 3.1.1 завещанию

class Users::PasswordsController < Devise::PasswordsController 

def new 
    super 
end 

def edit 
    super 
end 

def create 
    super 
end 

#override this so user isn't signed in after resetting password 
def update 
    self.resource = resource_class.reset_password_by_token(resource_params) 

    if resource.errors.empty? 
     resource.unlock_access! if unlockable?(resource) 
     flash_message = resource.active_for_authentication? ? :updated : :updated_not_active 
     set_flash_message(:notice, flash_message) if is_navigational_format? 

     respond_with resource, :location => after_resetting_password_path_for(resource) 
    else 
     respond_with resource 
    end 

    end 

protected 

    def after_resetting_password_path_for(resource) 
    new_session_path(resource) 
    end 

конец