ruby-on-rails 如何跳过设备的SessionsController的before_filter?

mnemlml8  于 2023-05-02  发布在  Ruby
关注(0)|答案(7)|浏览(130)

我的ApplicationController中有一个before_filter;也就是说,对于我的项目中的每个控制器。
如何为设备的SessionsController创建skip_before_filter操作?

8gsdolmq

8gsdolmq1#

这是我的同事刚刚向我展示的一种方法:

# 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
dw1jzc5e

dw1jzc5e2#

我最近在application_controller中遇到了这个问题,我使用skip_before_filter解决了这个问题。
Rails〈4

skip_before_filter :check_subdomain!, if: :devise_controller?

导轨〉= 4

skip_before_action :check_subdomain!, if: :devise_controller?
gzszwxb4

gzszwxb43#

我们做了这样的事情:
首先,创建自己的会话控制器,确保正确继承:

class SessionsController < Devise::SessionsController
  skip_before_filter :foobar

那就确定路线

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

或者,您可以对Devise的会话控制器进行补丁。

5f0d552i

5f0d552i4#

这是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/environments/development中添加类似的内容。rb:

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

xj3cbfub5#

在我的同事向我展示我在另一个答案中发帖的方式之前,我这样做了。我把这个贴出来,以防你觉得它更简单。

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

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

jm81lzqq6#

你可以简单地检查你的filter方法是否是devise controller。

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

ktca8awb7#

新答案

如何将before_filter Package 在unless块中,通过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 => ...

并授权其他人
found this here

相关问题