Подтвердить что ты не робот

Rails & Devise: как сделать страницу входа без макета?

Я знаю, что это, наверное, простой вопрос, но я все еще пытаюсь вычислить Devise вне...

Я хочу render :layout => false на моей странице входа; как я могу это сделать с помощью Devise?

4b9b3361

Ответ 1

Вы можете подклассифицировать контроллер и настроить маршрутизатор таким образом:

class SessionsController < Devise::SessionsController
  layout false
end

И в config/routes.rb:

devise_for :users, :controllers => { :sessions => "sessions" }

Вам также нужно переместить представления сеанса на этот контроллер.

ИЛИ сделать метод в app/controllers/application_controller.rb:

class ApplicationController < ActionController::Base

  layout :layout

  private

  def layout
    # only turn it off for login pages:
    is_a?(Devise::SessionsController) ? false : "application"
    # or turn layout off for every devise controller:
    devise_controller? && "application"
  end

end

Ответ 2

Вы также можете создать файл session.html.erb в приложении /views/layouts/devise. Затем этот макет будет использоваться только для знака на экране.

Ответ 3

Используя devise_controller? помощник, вы можете определить, когда контроллер Devise активен и соответственно реагирует. Чтобы Devise использовал отдельный макет для остальной части вашего приложения, вы можете сделать что-то вроде этого:

class ApplicationController < ActionController::Base
  layout :layout_by_resource

  protected

  def layout_by_resource
    if devise_controller?
      "devise"
    else
      "application"
    end
  end
end

создайте файл devise.html.erb в своих представлениях/макетах

Итак, если его контроллер устройства будет отображать макет дизайна еще макет приложения

from: https://github.com/plataformatec/devise/wiki/How-To:-Create-custom-layouts

Ответ 4

2019 Ответ

TL; DR

$ bundle open devise

а также

#sessions_controller.rb
class Devise::SessionsController < DeviseController
  layout false #user-added
  .
  .
end

Iain ответ работает

Тем не менее, это требует от нас создания контроллера и обновления маршрута, мы можем добиться того же эффекта, открыв исходный каталог gem-устройства devise в нашем комплекте и добавив layout false в sessions_controller.rb, вот так

class Devise::SessionsController < DeviseController
  layout false #user-added
  prepend_before_action :require_no_authentication, only: [:new, :create]
  prepend_before_action :allow_params_authentication!, only: :create
  prepend_before_action :verify_signed_out_user, only: :destroy
  prepend_before_action(only: [:create, :destroy]) { request.env["devise.skip_timeout"] = true }
  # GET /resource/sign_in
  def new
    self.resource = resource_class.new(sign_in_params)
    clean_up_passwords(resource)
    yield resource if block_given?
    respond_with(resource, serialize_options(resource))
  end
  .
  .
  .
end

Для того, чтобы открыть исходный каталог, используйте bundle open devise (не забудьте установить $ EDITOR или $ BUNDLER_EDITOR)