Estou com um problema no qual um usuário pode enviar qualquer formulário criado pela API do formulário várias vezes (clique rápido resultando em várias solicitações).
Eu coloquei a solução básica do cliente (javascript) para desativar o botão, mas estou curioso para saber qual é a melhor abordagem para evitar essa situação no lado do servidor.
Existe uma maneira recomendada de usar o sistema de token de formulário do Drupal para lidar com isso? Especialmente uma solução global de formulários (por exemplo, adicionando um validador personalizado a todos os formulários usando hook_form_alter ()).
Minha abordagem até agora tem sido algo assim:
function mymodule_form_alter(&$form, &$form_state, $form_id) {
$form['#validate'][] = 'mymodule_form_validate';
}
function mymodule_form_validate(&$form, &$form_state){
//initialize form array
if (!isset($_SESSION['submitted_forms'])){
$_SESSION['submitted_forms'] = array();
}
$form_token = $form_state['values']['form_token'];
if ( isset($_SESSION['submitted_forms'][$form_token]) && $_SESSION['submitted_forms'][$form_token] = TRUE ){
form_set_error('name]', 'This form has already been submitted');
}
else{
$_SESSION['submitted_forms'][$form_token] = TRUE;
}
}
Estou com problemas em que o form_token não é exclusivo do formulário - parece permanecer o mesmo, aconteça o que acontecer. Provavelmente estou entendendo mal qual é o token no grande esquema da API de formulário.
Qualquer insight é apreciado!