class Devise::SessionsController

def all_signed_out?

def all_signed_out?
  users = Devise.mappings.keys.map { |s| warden.user(scope: s, run_callbacks: false) }
  users.all?(&:blank?)
end

def auth_options

def auth_options
  { scope: resource_name, recall: "#{controller_path}#new" }
end

def create

POST /resource/sign_in
def create
  self.resource = warden.authenticate!(auth_options)
  set_flash_message!(:notice, :signed_in)
  sign_in(resource_name, resource)
  yield resource if block_given?
  respond_with resource, location: after_sign_in_path_for(resource)
end

def destroy

DELETE /resource/sign_out
def destroy
  signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
  set_flash_message! :notice, :signed_out if signed_out
  yield if block_given?
  respond_to_on_destroy
end

def new

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

def respond_to_on_destroy

def respond_to_on_destroy
  # We actually need to hardcode this as Rails default responder doesn't
  # support returning empty response on GET request
  respond_to do |format|
    format.all { head :no_content }
    format.any(*navigational_formats) { redirect_to after_sign_out_path_for(resource_name), status: Devise.responder.redirect_status }
  end
end

def serialize_options(resource)

def serialize_options(resource)
  methods = resource_class.authentication_keys.dup
  methods = methods.keys if methods.is_a?(Hash)
  methods << :password if resource.respond_to?(:password)
  { methods: methods, only: [:password] }
end

def sign_in_params

def sign_in_params
  devise_parameter_sanitizer.sanitize(:sign_in)
end

def translation_scope

def translation_scope
  'devise.sessions'
end

def verify_signed_out_user

to the after_sign_out path.
If there is no signed in user, it will set the flash message and redirect

Check if there is no signed in user before doing the sign out.
def verify_signed_out_user
  if all_signed_out?
    set_flash_message! :notice, :already_signed_out
    respond_to_on_destroy
  end
end