2017-02-19 10 views
1

Я пытаюсь настроить Devise так, чтобы всякий раз, когда пользователь, у которого учетная запись не была подтверждена, входит в систему, он перенаправляется на new_confirmation_path.
Это то, что я получил до сих пор:Rails, Devise: DoubleRenderError in FailureApp

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

class CustomFailure < Devise::FailureApp 
    def redirect_url 
     if warden_message == :unconfirmed 
      redirect_to new_user_confirmation_path(q: "unconfirmed") 
     else 
      super 
     end 
    end 
    def respond 
     if http_auth? 
      http_auth 
     else 
      redirect 
     end 
    end 
end 

конфигурации/application.rb

config.autoload_paths << Rails.root.join('lib') 

конфигурации/Инициализаторы/DEViSE .rb

config.warden do |manager| 
    manager.failure_app = CustomFailure 
end 

К сожалению, я получаю следующее сообщение об ошибке, когда пользователь пытается войти в систему:

AbstractController :: DoubleRenderError пользователей :: SessionsController # создать

Рендер и/или перенаправлять назывались несколько раз в этом действие. Обратите внимание, что вы можете вызывать только рендер или перенаправление, и не более одного раза за действие. Также обратите внимание, что ни перенаправление, ни рендер не завершают выполнение действия, поэтому, если вы хотите выйти из действия после перенаправления, вам нужно сделать что-то вроде «redirect_to (...) и return».

Ошибка в Lib/custom_failure.rb (около линии № 15)

Я после этого Devise Wiki Page

ответ

1

Как указано ошибкой, вы выполняете двойной визуализации (рендеринга или перенаправление). Я думаю, что это напрямую связано с вашим методом redirect_url.

Рассматривая devise's wiki, нет необходимости выполнять перенаправление при переопределении метода redirect_url. Кроме того, путем проверки devise's failure code, в конце неудачного запроса, приложение делает это:

redirect_to(redirect_url) 
# Which is equal to 
redirect_to(redirect_to(new_user_confirmation_path(q: "unconfirmed"))) 

что неправильно. Чтобы исправить это, укажите только URL-адрес вместо перенаправления в вашем redirect_url переопределении:

class CustomFailure < Devise::FailureApp 
    def redirect_url 
    if warden_message == :unconfirmed 
     # Remove the `redirect_to` call 
     new_user_confirmation_path(q: "unconfirmed") 
    else 
    super 
    end 
    end 

    # ... 
end 

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

  • Нет связанных вопросов^_^