Бонжур,
Я начинаю с Symfony и пытаюсь заставить пользователей видеть профили других пользователей.
Шаблон моего профиля одинаков для всех, отображение информации основано на имени пользователя, переданном в параметрах URL. Я просто сравниваю на ветке, если имя пользователя в сеансе и в параметрах совпадают.
Например, в моем представлении профиля:
{% if app.user.username == userAccount.username %}
My profile{% else %}
{{ userAccount.username }} profile{% endif %}
Мой метод индекса для учетной записи маршрута:
public function index($username, UserRepository $repo, Request $request{
$user = $repo->findUserByUsername($username);
if (!$user){throw $this->createNotFoundException();}
Я получаю пользователя в BDD по его имени пользователя. Проблема в том, что я действительно получаю все обратно, и я хотел бы знать, безопасно ли это? Может ли кто-нибудь каким-либо образом перехватить запрос и просмотреть всю полученную информацию?
Затем я создаю страницу смены пароля, маршрут всегда принимает имя пользователя в качестве параметра. Однако на этот раз в своем контроллере я указал, что необходимо перенаправить пользователя в случае, если его имя пользователя в сеансе не совпадает с тем, которое передается в параметрах.
public function changePassword($username, Request $request, UserPasswordEncoderInterface $passwordEncoder, ObjectManager $manager, \Swift_Mailer $mailer){
$user = $this->getUser();
if ($username == null){
$username = $user->getUsername();}
if ($user->getUsername() !== $username){
throw $this->createNotFoundException();}}
Это верный способ убедиться, что пользователь правильный?
Я не знаю, хорош ли мой способ ведения дел, поэтому, если бы кто-нибудь мог просветить меня, чтобы я мог продолжить или адаптировать свою работу.
Спасибо !




Twig выполняется на стороне сервера, поэтому, если ваш код написан правильно, я не вижу никаких проблем с безопасностью. Запрос не может быть перехвачен таким образом.
Но если вы переживаете (разработчики тоже могут ошибаться), я бы посоветовал разделить шаблоны и использовать одни и те же элементы.
Что касается части changePassword, вам действительно нужно передавать имя пользователя в запросе? У вас уже есть аутентифицированный пользователь в сеансе.
Если вы можете изменить пароль только для своей учетной записи (что нормально), имя пользователя в URL-адресе является лишней информацией для текущего пользователя. Ваш маршрут может быть просто /account/change_password. Твой выбор.
Да, вы правы, но я думал, что URL-адрес был красивее с именем пользователя до всех действий ^^
Спасибо за Ваш ответ. URL-адрес страницы смены пароля выглядит примерно так: /account/{username}/change_password. И я не хочу, чтобы пользователь мог редактировать URL-адрес другим словом (например, /account/hello/change_password). Я думаю, это просто визуально, но я хочу для перенаправления пользователя, если имя пользователя в URL неверно ^^ . Вот почему мне нужно передать имя пользователя в запросе, но я не уверен, что это лучший способ ^^