Использование скрытого поля формы для передачи идентификатора пользователя

Базы данных Разработка Формы

Автор: ACym.ru - April 6, 2016 5:33 pm

Почему не нужно передавать ID пользователя скрытым полем формы, и как быть, если он нужен

Многие сайты грешат тем, что передают ID пользователя через форму спрятанным полем.

Есть по крайней мере две причины, почему этого делать не стоит.

  1. То, что вы передаете в скрытом поле, легко обнаружить простым просмотром кода страницы. А увидев, что вы передаете идентификатор пользователя, можно запросто изменить передаваемый серверу запрос, и выдать себя за другого пользователя, изменив ID.

  2. Такая передача ID пользователя в Laravel не имеет смысла: система и так в курсе, какой у пользователя ID (раз передается ID, то, естественно предположить, что пользователь уже авторизовался на сайте, иначе у него нет ID), и для передачи ID нет необходимости включать его в скрытое поле формы, нужно просто спросить об этом систему.

Если сказанное выше вас не убедило, то, конечно, можно передать ID пользователя в скрытом поле формы.

Для этого в форме можно прописать, например:

<input type="hidden" name="id" value="{{ Auth::user()->id }}">

Либо вставив в качестве value переменную, в которую ID пользователя уже передано.

И обработать переданные данные в контроллере.

Как же обойтись без включения такого скрытого поля?

Так вот, эту строку из формы можно просто удалить (или не вставлять ее туда), а в методе контроллера, который осуществляет обработку полученных из формы данных, добавить то же обращение к функции аутентификации (Auth::user()->id), и добавить полученное значение к массиву данных.

Например, получаем такой код для формирования новой записи в блоге (стоящая перед этим, или выведенная в отдельный класс request проверка ввода опущена, равно как и последующая переадресация после выполнения этого кода и записи данных в базу; из формы передается массив $request):

$data = $request->all(); // Все данные из формы - в массив
$data['name'] = Auth::user()->username; // Добавляем к массиву имя пользователя, которое из формы не передается
$data['email'] = Auth::user()->user_email; // Добавляем к массиву мыло пользователя, которое из формы не передается
$data['date'] = Carbon::now(); // добавляем время публикации
Post::create($all); // Сохраняем все данные в базу

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

Удачных разработок!
Заходите на LaraNotes.ru, и оставляйте свои записки по работе с Laravel.

.