gpt4 book ai didi

ruby-on-rails - 跳过特定路由的 http_basic_authentication_with

转载 作者:行者123 更新时间:2023-12-05 05:27:07 27 4
gpt4 key购买 nike

在 Rails 中,我有一个定义 http_basic_authentication_with 的基本 Controller ,我希望在子类中跳过特定的路由。这类似于我指定 Controller skip_before_filter 的方式。这可能吗?

我的基本 Controller 看起来像这样:

class BaseController < ApplicationController
http_basic_authenticate_with name: "name", password: "password"
end

我有一个继承自它的 Controller :

class HomeController < BaseController
def index
end

def no_auth
end
end

我希望“index”需要基本身份验证,但“no_auth”不需要。

谢谢!

最佳答案

这是我的做法。

class BaseController < ApplicationController
http_basic_authenticate_with name: "name", password: "password"
end

让我们用我们自己的类方法替换 http_basic_authenticate_with。我们称它为 auth_setup

class BaseController < ApplicationController
auth_setup

def self.auth_setup
http_basic_authenticate_with name: "name", password: "password"
end
end

因为我们不想在每个子类中调用它,我们可以只提取其他方法的参数。我们称它为 auth_params。

class BaseController < ApplicationController
auth_setup

def self.auth_setup
http_basic_authenticate_with auth_params
end

def self.auth_params
{ name: 'name', password: 'password' }
end
end

从现在开始,我们可以使用这个方法来修改我们子类中的auth参数。例如:

class HomeController < BaseController    
def index
end

def no_auth
end

def self.auth_params
(super).merge(except: :index)
end
end

但是,Ruby 类定义中的方法调用不是继承的(很容易忘记 Rails 风格的事物)。根据 http_basic_authenticate_with 的实现,您将需要另一个修复 - inherited 回调。

class BaseController < ApplicationController
auth_setup

def self.auth_setup
http_basic_authenticate_with auth_params
end

def self.auth_params
{ name: 'name', password: 'password' }
end

def self.inherited(subclass)
subclass.auth_setup
end
end

希望对您有所帮助!

关于ruby-on-rails - 跳过特定路由的 http_basic_authentication_with,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21739826/

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