Tôi đang gặp vấn đề trong đó người dùng có thể gửi bất kỳ biểu mẫu nào được API Mẫu tạo ra nhiều lần (nhấp nhanh dẫn đến nhiều yêu cầu).
Tôi đã đưa vào giải pháp vô hiệu hóa phía máy khách cơ bản (javascript), nhưng tôi tò mò không biết cách tiếp cận tốt nhất để ngăn chặn tình huống này là ở phía máy chủ.
Có cách nào được đề xuất để sử dụng hệ thống mã thông báo biểu mẫu của Drupal để xử lý việc này không? Đặc biệt là một giải pháp biểu mẫu toàn cầu (nghĩa là thêm trình xác nhận tùy chỉnh vào mọi biểu mẫu bằng hook_form_alter ()).
Cách tiếp cận của tôi cho đến nay là một cái gì đó như thế này:
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;
}
}
Tôi đang gặp rắc rối khi form_token không phải là duy nhất cho biểu mẫu - nó dường như giữ nguyên cho dù điều gì xảy ra. Tôi có thể hiểu nhầm mã thông báo là gì trong sơ đồ lớn của mẫu api.
Bất kỳ cái nhìn sâu sắc được đánh giá cao!