#url #controllers #protection
#url #контроллеры #защита
Вопрос:
Я вроде как новичок в rails, чего я хочу, так это защитить профиль пользователя
я имею в виду, что если пользователь 1 войдет в систему и перейдет к редактированию своего профиля, он может, но также, если он изменит URL для пользователя на # 2, они также могут изменить свою информацию
localhost: 3000/users /2/редактировать
Я немного заблудился, буду признателен за любую помощь или предложения хороших книг / блогов
Ответ №1:
В качестве части аутентификации добавьте переменную сеанса, session[:user_id] = User.Аутентифицироваться(параметры [:user][:username], параметры [:user][:password) (это общий шаблон, вам нужно добавить другой ресурс для аутентификации).
Затем добавьте функцию before_filter к вашему контроллеру и проверьте, соответствует ли session[:user_id] == параметрам [:id]. Посмотрите на это здесь: before_filter
Ответ №2:
Руководство по безопасности Rails, вероятно, является хорошим местом для начала
Ответ №3:
На всякий случай, если это кому-то пригодится, при тестировании моего приложения я столкнулся с тем, что, хотя пользователи, которые не вошли в систему, не могли получить доступ к ограниченному контенту, после входа в систему пользователь мог изменить URL на другой идентификатор пользователя, например.
/users/3
и тогда это показало бы домашнюю страницу этого пользователя. Таким образом, любой пользователь мог просматривать любого другого пользователя, чего я не хотел.
Чтобы обойти это, я изменил пользовательский контроллер для защиты от этого:
class UsersController < ApplicationController
#first call the correct_user function before allowing the show action to proceed
before_filter :correct_user, only: [:show]
...
def show
#do whatever here
end
...
private
def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user?(@user)
end