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!
Jawaban:
Saya memiliki masalah yang sama persis dan berhasil memperbaikinya menggunakan mekanisme Penguncian dari Drupal
Dalam fungsi validasi yang saya gunakan:
Dan dalam fungsi kirim, saya melepaskan kunci:
sumber
Di sini Anda harus mempertimbangkan bobot modul:
sumber
Jika Anda ingin fungsionalitas ini pada semua formulir dan kontrol lebih banyak tanpa pengkodean lihatlah modul Sembunyikan Tombol Kirim .
sumber
Semoga ini bisa membantu ..
atau Anda dapat merujuk Mencegah beberapa klik tombol kirim & drupal memiliki satu modul Sembunyikan tombol kirim
sumber
Ini juga masalah saya sebelumnya. Solusi saya untuk ini adalah menonaktifkan tombol melalui JS.
.modul:
JS:
sumber