Используя переменную сессии, на мой взгляд - PullRequest
5 голосов
/ 17 марта 2009

Мне сказали, что я не должен использовать переменные, такие как params[:user_id], в моих файлах просмотра. Применимо ли то же правило к переменной session?

Если нет, то что мне делать? Сначала назначьте его переменной экземпляра, а затем используйте это в представлении? Это кажется раздражающим, поскольку я должен был бы сделать это для каждого из моих действий. Думаю, я мог бы поместить этот повторяющийся код в один метод, который вызывается всеми другими действиями в этом классе.

Ответы [ 2 ]

7 голосов
/ 17 марта 2009

Эта рекомендация основана на передовом опыте «разделения проблем» между различными компонентами, составляющими ваше Rails-приложение. Лучшее место для определения текущего пользователя в вашем контроллере. Здесь вы можете получить доступ к своим параметрам и / или сеансу, чтобы определить, вошел ли кто-то прямо или косвенно через плагин аутентификации. Затем, если вам нужна эта информация в вашем представлении, просто сохраните ее в такой переменной, как @user, которая будет автоматически доступна в вашем представлении для отображения. Делая это таким образом, если вы позже измените свой механизм аутентификации, вы можете сделать это, не касаясь ваших представлений, что является хорошим признаком того, что у вас есть хорошее разделение между различными компонентами в вашем приложении.

Также в ответ на вторую часть вашего вопроса:

Я думаю, я мог бы поставить это повторение код в одном методе, который вызывается всеми другими действиями в этом класс.

Это легко сделать с помощью: before_filter в вашем контроллере, который вы можете указать на метод, который проверяет аутентификацию и создает любые необходимые переменные экземпляра для совместного использования между действиями в вашем контроллере.

2 голосов
/ 17 марта 2009

Вы определенно хотите проверять params[:user_id] или session[:user_id] при каждой загрузке страницы. Если ваш сеанс перехвачен, вы потенциально можете поместить нежелательный код в ваше представление и разрешить межсайтовую скриптовую атаку.

Тем не менее, правильный метод, используемый в плагине authenticated_system, должен ссылаться на вспомогательный метод current_user, который позволяет вам получить current_user.user_id.

Кроме того, если вы используете user_id при обращении к базе данных, вы все равно должны проверить это, вызвав @selected_user = User.find(params[:user_id] и используя @selected_user.id в вашем представлении и действии контроллера.

Вы получите гораздо больше контроля и защиты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...