Рейтинг:2

Токен CSRF не меняется в обратном вызове Ajax при отправке формы

флаг us

У меня есть форма с обратным вызовом ajax следующим образом: каждый токен отправки не меняется, он остается постоянным для всех отправки.

wall.routing.yml

стена.комментарийформа:
  путь: '/комментарийформа'
  значения по умолчанию:
    _title: 'Форма комментариев'
    _form: '\Drupal\wall\Form\WallCommentPost'
  требования:
    _permission: 'доступ к содержимому'
    _csrf_token: «ИСТИНА»

В следующем

WallCommentPost.php

$аякс = [
  'обратный вызов' => [$это, '_wall_comment_ajax_form_post'],
  'обертка' => 'заменить-комментарий-типа-поля',
  'событие' => 'щелчок',
  'прогресс' => массив (
    'тип' => 'пульсирующий',
    'сообщение' => '',
  )
];

$ форма ['wall_submit'] = [
  '#type' => 'отправить',
  '#value' => 'Отправить',
  '#ajax' => $ajax,
  '#prefix' => '<div class="col-12 p-1 d-flex justify-content-between"><div class="file_name_insert file_name_insert_data-' . $nid . ' pl-4 text-truncate"> </дел>',
  '#суффикс' => '</div>',
  '#атрибуты' => массив(
    'класс' => массив (
      'бтн',
      $ajax_класс,
      'д-нет',
      'subbtn-' . $нид
    ),
    'отключено' => 'отключено'
  ),
];
$url = Url::fromRoute('wall.commentform');
$token = \Drupal::csrfToken()->get($url->getInternalPath());

$form['#action'] = Url::fromRoute('wall.commentform')->setOption('query', [FormBuilderInterface::AJAX_FORM_REQUEST => 1, 'token1' => $token])->toString( );
miststudent2011 avatar
флаг fr
Я вижу, что $token закомментирован, это сделано намеренно? или вы пропустили?
Monika avatar
флаг us
По умолчанию этот URL-адрес сам генерирует токен, я только что проверил этот способ, принудительно добавив токен, но он остается постоянным значением.
Jaypan avatar
флаг de
Я не могу понять, что ты пытаешься сделать. Я вижу, как вы пытаетесь это сделать, но я не понимаю, какова ваша цель или что работает вопреки ожидаемому. Не хватает информации.
miststudent2011 avatar
флаг fr
Может поможет https://drupal.stackexchange.com/a/268262/?
Monika avatar
флаг us
Токен CSRF должен меняться при каждом запросе на отправку, это моя цель, поскольку на данный момент токен CSRF, передаваемый в URL-адресе, остается постоянным. как изменить значение токена для каждого запроса на отправку?
Рейтинг:0
флаг fr

После дальнейших раскопок выяснилось, что причина того, что токен CSRF не меняется.

Токен CSRF зависит от сеанса.Таким образом, до тех пор, пока сеанс не будет таким же, токен CSRF останется прежним.

Выйдите из системы и войдите снова и отправьте форму, вы получите новый токен.

Есть проблема сообщается на Drupal.org для того же, хотя это исправлено для Drupal 8, оно не работает должным образом.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.