Rails & Devise: how to make a login page without layout?

I know this is probably a simple question, but I'm still trying to figure out Devise outside ...

I want render :layout => false on my login page; how can i do this using devise ?

+54
ruby-on-rails devise
Dec 10 '10 at 18:25
source share
4 answers

You can subclass the controller and configure the router in this way:

 class SessionsController < Devise::SessionsController layout false end 

And in config/routes.rb :

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

You also need to move the session views to this controller.

OR make a method in 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 
+103
Dec 10 2018-10-10
source share

You can also create a session.html.erb file in the / views / layouts / devise application. Then this layout will be used only for the sign on the screen.

+36
Sep 05 '11 at 19:37
source share

Using devise_controller? helper, you can determine when the Devise controller is active and responds accordingly. To make Devise use a separate layout for the rest of your application, you can do something like this:

 class ApplicationController < ActionController::Base layout :layout_by_resource protected def layout_by_resource if devise_controller? "devise" else "application" end end end 

create devise.html.erb file in your views / layouts

So, if his device controller will display a design layout another application layout

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

+8
Aug 07 '13 at 15:08
source share

2019 Answer

TL; DR

 $ bundle open devise 

as well as

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



Iain answer works

However, this requires us to create a controller and update the route, we can achieve the same effect by opening the source directory of the devise gem device in our kit and adding layout false to sessions_controller.rb , like this

 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 

To open the source directory, use bundle open devise (do not forget to set $ EDITOR or $ BUNDLER_EDITOR)

0
Jun 21. '19 at 6:49
source share



All Articles