Me encuentro con un problema en el que un usuario puede enviar cualquier formulario creado por la API del formulario varias veces (hacer clic rápidamente dando como resultado múltiples solicitudes).
He puesto la solución básica del lado del cliente (javascript) de deshabilitar el botón, pero tengo curiosidad por saber cuál es el mejor enfoque para prevenir esta situación en el lado del servidor.
¿Hay alguna forma recomendada de usar el sistema de token de formulario de Drupal para manejar esto? Especialmente una solución de formulario global (es decir, agregar un validador personalizado a cada formulario usando hook_form_alter ()).
Mi enfoque hasta ahora ha sido algo como esto:
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;
}
}
Me encuentro con problemas donde el form_token no es exclusivo del formulario, parece que permanece igual pase lo que pase. Probablemente estoy malinterpretando cuál es el token en el gran esquema de la API de formulario.
Cualquier idea es apreciada!