Отправленная форма на основе класса сущности автоматически меняет токен пользователя - PullRequest
0 голосов
/ 20 марта 2020

Я только начал изучать Symfony и столкнулся с проблемой. У меня есть типичный пользовательский класс сущности, с такими полями, как «имя», «электронная почта», «пароль» и т. Д. c.

\ Form \ UserType. php

<?php

namespace App\Form;

use App\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class UserType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username')
            ->add('email')
            ->add('password', null, ['data' => 'Type in your password'])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => User::class,
        ]);
    }
}

\ Контроллер \ UserController. php

/* Some code */

/**
 * @Route("id{id}/edit", name="user_edit", methods={"GET","POST"})
 */
public function edit(Request $request, User $user, UserPasswordEncoderInterface $encoder): Response
{
    $form = $this->createForm(UserType::class, $user);
    $form->handleRequest($request);

    /* Some code */

    return $this->render('user/edit.html.twig', [
        'form' => $form->createView(),
    ]);
}

\ templates \ user \ edit. html .twig

{% extends 'base.html.twig' %}

{% block title %}{{ app.user.username }} profile{% endblock %}

{% block body %}

    <h1>Edit user {{ app.user.username }}</h1>

    {{ form_start(form) }}
    {{ form_widget(form) }}
    <button class="btn">{{ button_label|default('Save') }}</button>
    {{ form_end(form) }}

    <a href="{{ path('user_index', {'id': app.user.id}) }}">back</a>

{% endblock %}

После отправки формы токен автоматически изменится в соответствии с введенным данные. В результате пользователь деавторизован. Как это можно исправить? Я просто хочу получить данные из формы, не меняя токен.

1 Ответ

0 голосов
/ 20 марта 2020

Так работает компонент безопасности Symfony. Когда данные пользователя изменяются, информация, хранящаяся в токене, становится недействительной, и пользователь должен пройти повторную аутентификацию. В репозитории Symfony есть проблема, объясняющая поведение с некоторыми идеями, как обойти эту проблему, взгляните на https://github.com/symfony/symfony/issues/35501#issuecomment -579799666

...