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

Как пропустить файл before_filter для Devise SessionsController?

У меня есть before_filter в моем ApplicationController; то есть для каждого контроллера в моем проекте.

Как я могу skip_before_filter для Devise SessionsController создать действие?

4b9b3361

Ответ 1

Мы сделали что-то вроде этого:

Сначала создайте свой собственный контроллер сеанса, убедитесь, что наследуете правильно:

class SessionsController < Devise::SessionsController
  skip_before_filter :foobar

Затем зафиксируйте маршруты

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

В качестве альтернативы вы можете настроить контроллер сеанса обезьяны-патча.

Ответ 2

Вот метод, который мой коллега только что показал мне:

# In config/application.rb
module YourAppNameHere
  class Application < Rails::Application
  # Whatever else is already here...

    # The part to add
    config.to_prepare do
      Devise::SessionsController.skip_before_filter :your_before_filter_here
    end
  end
end

Ответ 3

Недавно у меня была эта проблема с фильтром в моем application_controller, я решил его с помощью skip_before_filter

skip_before_filter :check_subdomain!, if: :devise_controller?

Ответ 4

Здесь другой путь в lib/devise_sessions_controller_decorator.rb:

module DeviseSessionsControllerDecorator
  extend ActiveSupport::Concern

  included do
    skip_before_filter :your_filter_name
  end
end

Devise::SessionsController.send(:include, DeviseSessionsControllerDecorator)

Поскольку классы не кэшируются в режиме разработки, вам может потребоваться добавить что-то вроде этого в config/environment/development.rb:

config.to_prepare do
  Devise::SessionsController.send(:include, DeviseSessionsControllerDecorator)
end

Ответ 5

Прежде чем мой коллега показал мне, как я опубликовал в своем другом ответе, я сделал это. Я публикую это на случай, если вы считаете это более простым.

class ApplicationController < ActionController::Base
  # ...
  before_filter :do_something

  def do_something
    unless params[:controller] == 'devise/sessions'
      # ...
    end
  end
end

Ответ 6

Вы можете просто проверить свой фильтр, независимо от того, разрабатывает ли он контроллер или нет.

  if params[:controller] != 'devise/sessions'

Ответ 7

новый ответ

как насчет обертывания файла before_filter в блочной фильтрации до params[:controller]

def some_before_action
  unless params[:controller] == "sessions_controller_for_devise_name"
      ... #=> do the stuff here
  end 
end

старый ответ

просто авторизуйте, какие действия должны использовать фильтр before

before_filter :action, :only => ...

и разрешить другим.

нашел это здесь