gpt4 book ai didi

ruby-on-rails - 某些(不是全部) Controller 的 HTTP 基本身份验证

转载 作者:行者123 更新时间:2023-12-04 00:03:33 25 4
gpt4 key购买 nike

使用 Rails 3.2。

我有六个 Controller ,想保护 一些 (但不是全部)http_basic_authenticate_with .

我不想手动添加 http_basic_authenticate_with到每个 Controller (我将来可以添加另一个 Controller 而忘记保护它!)。看来答案是把它放在 application_controller.rb:except arg 将列出不应 protected Controller 。问题是, :except 子句需要方法名称而不是外部 Controller 模块名称,例如:

http_basic_authenticate_with :name => 'xxx', :password => 'yyy', :except => :foo, :bar

于是我想“等等,因为我已经将 protected Controller 分组在 routes.rb 中,让我们把它放在那里。”所以我在我的 route 尝试了这个:
  scope "/billing" do
http_basic_authenticate_with :name ...
resources :foo, :bar ...
end

但现在我明白了
undefined method `http_basic_authenticate_with'

解决这个问题的最佳方法是什么?

最佳答案

像 Rails 那样做。

# rails/actionpack/lib/action_controller/metal/http_authentication.rb

def http_basic_authenticate_with(options = {})
before_action(options.except(:name, :password, :realm)) do
authenticate_or_request_with_http_basic(options[:realm] || "Application") do |name, password|
name == options[:name] && password == options[:password]
end
end
end

所有这些 http_basic_authenticate_with确实是添加 before_action .您也可以自己轻松地做同样的事情:
# application_controller.rb

before_action :http_basic_authenticate

def http_basic_authenticate
authenticate_or_request_with_http_basic do |name, password|
name == 'xxx' && password == 'yyy'
end
end

这意味着您可以使用 skip_before_action在不需要这种行为的 Controller 中:
# unprotected_controller.rb

skip_before_action :http_basic_authenticate

关于ruby-on-rails - 某些(不是全部) Controller 的 HTTP 基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14790832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com