Sto riscontrando un problema in cui un utente può inviare più volte qualsiasi modulo creato dall'API del modulo (un clic rapido che genera più richieste).
Ho inserito la soluzione di base lato client (javascript) per disabilitare il pulsante, ma sono curioso di sapere quale sia l'approccio migliore per prevenire questa situazione sul lato server.
Esiste un modo consigliato per utilizzare il sistema di token di modulo di Drupal per gestirlo? Soprattutto una soluzione di modulo globale (ovvero, l'aggiunta di un validatore personalizzato a ogni modulo utilizzando hook_form_alter ()).
Finora il mio approccio è stato qualcosa del genere:
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;
}
}
Sto incontrando problemi in cui il form_token non è univoco per il modulo - sembra rimanere lo stesso, qualunque cosa accada. Probabilmente sto fraintendendo quale sia il token nel grande schema della forma api.
Qualsiasi intuizione è apprezzata!