Saya mengalami masalah di mana pengguna dapat mengirimkan formulir apa pun yang dibangun oleh API Formulir beberapa kali (klik cepat yang menghasilkan banyak permintaan).
Saya telah memasukkan solusi sisi klien dasar (javascript) menonaktifkan tombol, tapi saya ingin tahu apa pendekatan terbaik untuk mencegah situasi ini di sisi server.
Apakah ada cara yang disarankan untuk menggunakan sistem token form Drupal untuk menangani ini? Terutama solusi formulir global (yaitu, menambahkan validator kustom ke setiap formulir menggunakan hook_form_alter ()).
Pendekatan saya sejauh ini adalah seperti ini:
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;
}
}
Saya mengalami masalah di mana form_token tidak unik pada formulir - sepertinya tetap sama apa pun yang terjadi. Saya mungkin salah paham apa token yang ada dalam skema besar bentuk api.
Wawasan apa pun dihargai!