2013-02-21 3 views
5

После регистрации, которая нуждается в подтверждении, мое приложение перенаправляется на аутентифицированную страницу, чтобы аутентификация завершилась неудачей, а Devise перенаправляется на путь входа в систему.Как flash.keep при создании переадресации на путь входа в систему

Мое флеш-сообщение после регистрации утеряно из-за второй переадресации.

Есть ли где-нибудь я могу добавить flash.keep перед перенаправлением на путь входа в application_controller.rb или в помощнике? Я бы предпочел не переопределять контроллер для этого, если есть альтернатива.

+1

Любые причины, по которым вы не хотите переопределять контроллер? Это правильное решение, просто измените after_sign_up_path_for. – Leito

+0

Хорошо, да, спасибо – rigyt

ответ

3

После регистрации, я храню флэш сообщение в сеансе перед перенаправлением к пинкам Войти пути в (потому что пользователь неподтвержденное это «after_ неактивных _sign_up_path_for () ")

DEViSE зарегистрирования контроллер:

class RegistrationsController < Devise::RegistrationsController 
    protected 
    def after_inactive_sign_up_path_for(resource) 
     # store message to be displayed after redirection to login screen 
     session[:registration_flash] = flash[:notice] if flash[:notice] 
     super 
    end 
end 

Тогда я показываю это сообщение, если он присутствует во время запроса авторизации. Разрабатывают Сессии контроллера: ответ

class SessionsController < Devise::SessionsController 
    def new 
    flash[:notice] = session.delete(:registration_flash) if session[:registration_flash] 
    super 
    end 
end 
0

Почему бы просто не изменить флэш-сообщение по умолчанию, которое вы хотите, чтобы ваше сообщение говорило? Вы можете отредактировать флэш-сообщение в файле devise.en.yml. Я думаю, что один вы ищете под registrationssigned_up_but_unconfirmed

1

Обновление @ rigyt к новейшим завещанию, используя Devise Failure App methodology

Создать приложение пользовательского отказа, как показано в ссылке выше.

Библиотека/devise_failure.rb:

def respond 
    if http_auth? 
     http_auth 
    else 
     # From original Devise Failure App 
     store_location! 
     if flash[:timedout] && flash[:alert] 
     flash.keep(:timedout) 
     flash.keep(:alert) 
     else 
     flash[:alert] = i18n_message 
     end 

     # Store flash temporarily in session because devise strips it 
     session[:login_flash] = flash.to_hash 

     redirect_to new_user_session_path 
    end 
    end 

sessions_controller:

def new 
    flash_from_session 
    super 
    end 

    def flash_from_session 
    if session[:login_flash] 
     session[:login_flash].each do |arr| 
     flash[arr.first] = arr.last 
     end 
     session.delete(:login_flash) 
    end 
    end 

Это позволит установить вспышки, как ожидается, и удалить их из сессии. Я также нашел, что он хорошо работает с pivotal's cacheable_flash

Смежные вопросы