Laravel 4: Предотвращение отправки нескольких форм – токен CSRF

Сценарий проблемы:

Я создаю блог с Laravel 4. Форма, которая отвечает за создание новых сообщений в блоге, обеспечивается сборкой в ​​CSRF-защите ( Laravel Docs: CSRF Protection ).

Пока все работает нормально, но кажется, что laravel не обновляет токен csrf при каждом запросе.

Возникающая проблема заключается в том, что если пользователь обращается к кнопке «Назад» браузера, чтобы вернуться к представленной форме, введенные данные сохраняются, и пользователь может «повторно отправить» форму. Это может создать открытую дверь для спамеров.

Обычно это предотвращается токеном CSRF, поскольку он обновляется по каждому запросу, но Laravel, похоже, не делает этого так.

Я использую laravel «Resource Controller» ( Laravel Docs: Resource Controllers ) для обработки форм и просмотров блога. Кроме того, я использую валидатор ввода Laravels перед сохранением поданного ввода в базе данных (MySQL).

Так появились следующие идеи:

  1. каким-то образом заставить Laravel 4 автоматически обновлять csrf при каждом запросе

  2. сгенерировать еще один токен и включить его в форму вручную

  3. сохранить временную метку представления формы в сеансе пользователей (php или базу данных) и подавать новые формы на основе времени

Лично я предпочитаю первую идею, но, к сожалению, я не мог найти способ заставить laravel вести себя так, как я этого хочу, без взлома самого «Illuminate» (который я хочу сохранить «как есть», чтобы иметь возможность обновлять laravel без «hassle hoff » ^^).

Чтобы вы посоветовали?

Как вы сами справлялись с проблемой?

    Я на самом деле столкнулся с этой проблемой и для нескольких сообщений. У вас есть два варианта:

    1) Создайте новый токен ПОСЛЕ отправки сообщения:

    Session::put('_token', sha1(microtime()))

    2) Перенаправить по почте на страницу подтверждения:

    Redirect::route('form/success')->with("data", $myData)

    Я закончил делать второе.

    EDIT: в комментарии через Джейсона может быть лучше использовать комбинацию обоих методов, описанных выше