#ruby-on-rails #actioncontroller #activesupport-concern
Вопрос:
Допустим, у меня есть проблема с контроллерами, и ее название-аутентификация. Он содержит метод before_action authenticate_user. Где я должен написать перед действием :authenticate_user? какова наилучшая практика? Должно ли это быть написано в отношении или в контроллере, в который включена эта проблема?
ПРИМЕЧАНИЕ: Я хочу реализовать единую ответственность
Ответ №1:
Это зависит от структуры вашего контроллера. Логика аутентификации чаще всего размещается в контроллере более высокого уровня, от которого в конечном итоге наследуется большинство других контроллеров, а не проблема. Это связано с тем, что вы можете просто включить проверку подлинности на более высоком уровне и активировать ее на всех субконтроллерах без необходимости явно добавлять проблему для каждого из них, что может быть более подвержено ошибкам. Этот контроллер более высокого уровня будет содержать и 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
Комментарии:
1. что, если мы включим эту проблему в контроллер высокого уровня, такой как контроллер приложений? Я хочу реализовать принцип единой ответственности.
2. Это нормально, если исключить логику,
ApplicationController
чтобы она была чище и понятнее.