2015-07-15 5 views
1

Я нахожу, что полагаюсь на свой вспомогательный метод current_user, который часто используется в контроллерах. Однако чем больше я использую его, тем больше я думаю, что, вероятно, этого не должно быть. Это потому, что мои маршруты не такие RESTful, как они должны быть? Должен ли я действительно искать User.find(params[:user_id]) для любого запроса, где я нахожусь с помощью current_user (особенно в контексте когда-либо открывающего API)?Рельсы, когда использовать current_user в контроллере

ответ

3

REST - это путь к маршрутам, то есть как пути и параметры работают вместе, чтобы определить, какое действие контроллера обрабатывает запрос и т. Д. Это не имеет никакого отношения к current_user. current_user ищет в вашей сессии (который в конечном счете использует куки на компьютере клиента), чтобы увидеть, кто в данный момент вошли в систему.

Вы могли бы использовать User.find(params[:user_id]) в ситуации, когда пользователь сайта хочет сделать что-то с этим (которая может быть их собственной, но, вероятно, нет). это не имеет никакого отношения к тому, кто в настоящее время зарегистрирован на вашем сайте.

EDIT: вы указываете API в конце. Как правило, если API вообще что-то делает с концепцией «current_user», то текущий пользователь будет лицом, у которого есть , прошедшим проверку подлинности через элементы управления доступом API, какими бы они ни были, подобно концепции входа в систему веб-сайт, за исключением того, что, как правило, с API, у вас нет концепции входа в систему: каждый запрос API обычно аутентифицируется сам, если вообще требуется аутентификация.

2

Возможно, вы, вероятно, правильно использовали current_user столько, сколько вы. Вы не хотите передавать идентификатор пользователя с помощью параметров и полагаться на это по соображениям безопасности.

Не видя никакого кода, я предполагаю, что вы понимаете MVC настолько, что модели должны быть толстыми, а контроллеры должны быть тощими. Поэтому, используя current_user с разработкой (я предполагаю), часто в контроллерах необходимо получить текущую информацию пользователя.

Смежные вопросы