【发布时间】:2021-05-23 12:46:56
【问题描述】:
假设我对控制器有疑问,它的名称是身份验证。它包含一个 before_action 方法 authenticate_user。我应该在哪里写 before_action :authenticate_user? 最佳做法是什么?是否应该写在关注点或包含此关注点的控制器中?
注意:我想实现单一职责
【问题讨论】:
标签: ruby-on-rails actioncontroller activesupport-concern
假设我对控制器有疑问,它的名称是身份验证。它包含一个 before_action 方法 authenticate_user。我应该在哪里写 before_action :authenticate_user? 最佳做法是什么?是否应该写在关注点或包含此关注点的控制器中?
注意:我想实现单一职责
【问题讨论】:
标签: ruby-on-rails actioncontroller activesupport-concern
这取决于您的控制器结构。 Auth 逻辑通常放置在大多数其他控制器最终继承自的更高级别控制器中,而不是关注点。这是因为您可以简单地在更高级别启用身份验证并使其在所有子控制器上处于活动状态,而无需为每个子控制器显式添加关注点,这可能更容易出错。该更高级别的控制器将包含before_action 和authenticate_user 方法。如果出于任何原因,沿途有一个控制器需要禁用身份验证,假设这是一个例外,您可以使用skip_before_action。
class UserController < ApplicationController
before_action :authenticate
private
def authenticate
# ...
end
end
class SomeController < UserController
# auth already enabled here
end
【讨论】:
ApplicationController 之外就可以让它更简洁、更易于理解。