Аутентификация Devise - нет подтверждения после восстановления пароля

Я использую гем аутентификации Devise с Rails.

Как отобразить сообщение из devise.en.yml:

send_instructions: 'You will receive an email with instructions about how to reset your password in a few minutes'

после того, как электронная почта для восстановления пароля была отправлена, а не перенаправлена ​​​​в корень сайта?

Обновление:

Я нашел интересный фрагмент кода в devise_controller.rb:

def successfully_sent?(resource)
  notice = if Devise.paranoid
    resource.errors.clear
    :send_paranoid_instructions
  elsif resource.errors.empty?
    :send_instructions
  end

  if notice
    set_flash_message :notice, notice if is_navigational_format?
    true
  end
end

Установка точек останова показывает, что вызываются правильные строки, :send_instructions назначается notice , вызывается set_flash_message, но я не могу увидеть результат всего этого, потому что меня сразу перенаправляют к корневому пути.


person Paul    schedule 18.05.2012    source источник
comment
проверьте, был ли назначен flash[:notice] + есть ли у вас блок, который отображает флеш-сообщения + посмотрите логи, возможно, у вас двойное перенаправление   -  person Yuri Barbashov    schedule 21.05.2012
comment
У меня есть блок flash[:notice], но я понятия не имею, где может быть спрятано дополнительное перенаправление.   -  person Paul    schedule 22.05.2012
comment
add Вы проверили, что flash[:notice] назначен?   -  person Yuri Barbashov    schedule 22.05.2012
comment
да, у меня есть условие там. Кстати: как это может предотвратить перенаправление?   -  person Paul    schedule 25.05.2012


Ответы (1)


Посмотрите исходный код для PasswordsController devise: https://github.com/plataformatec/devise/blob/master/app/controllers/devise/passwords_controller.rb#L42

Вам нужно будет создать PasswordsController в своем приложении, которое наследуется от Devise::PasswordsController, реализовать только метод after_sending_reset_password_instructions_path_for(resource_name) и при настройке маршрутов указать devise использовать ваш контроллер

class PasswordsController < Devise::PasswordsController
  protected
  def after_sending_reset_password_instructions_path_for(resource_name)
    #return your path
  end
end

в маршрутах

devise_for :users, :controllers => { :passwords => "passwords" }
person Cristian Bica    schedule 18.05.2012
comment
Я просмотрел ресурсы - есть строка send_instructions, которая никогда не отображается, но если она есть, должна быть функция, которая ее показывает. Сегодня при экспериментах с контроллерами нечаянно получил это сообщение, но не знаю как. - person Paul; 21.05.2012
comment
Наверное, это еще один вопрос. Скорее всего, когда вы перенаправляете на путь в after_sending_reset_password_instructions_path_for, этот путь перенаправляет на другую страницу, и флэш-сообщение теряется. Посмотрите лог/development.log - person Cristian Bica; 22.05.2012