Ошибка токена CSRF при генерации данных из холста - PullRequest
0 голосов
/ 17 января 2020

Я использую пакет с именем laravel -admin .

Я создал поле подписи в популярном пакете SignaturePad, данные были успешно преобразованы в изображение. Однако, когда я попытался отправить форму, я получил сообщение об ошибке соответствия токена CSRF.

Вот мой код для рендеринга SignaturePad class:

public function render()
{
    $this->script = <<<EOT
    var canvas = document.getElementById('signature-pad');

    // Adjust canvas coordinate space taking into account pixel ratio,
    // to make it look crisp on mobile devices.
    // This also causes canvas to be cleared.
    function resizeCanvas() {
        // When zoomed out to less than 100%, for some very strange reason,
        // some browsers report devicePixelRatio as less than 1
        // and only part of the canvas is cleared then.
        var ratio = Math.max(window.devicePixelRatio || 1, 1);
        canvas.width = canvas.offsetWidth * ratio;
        canvas.height = canvas.offsetHeight * ratio;
        canvas.getContext("2d").scale(ratio, ratio);
    }

    window.onresize = resizeCanvas;
    resizeCanvas();

    var signaturePad = new SignaturePad(canvas, {
        backgroundColor: 'rgb(255, 255, 255)' // necessary for saving image as JPEG; can be removed is only saving as PNG or SVG
    });

    $('button[type="submit"]').click(function() {
        console.log(signaturePad.toDataURL());
        $('input[type=hidden]').val(signaturePad.toDataURL());
    });

    EOT;
    return parent::render();
}

Если я уберу строку ниже, я не получу ее, но, очевидно, мои данные не отправляются. Это работает так: я конвертирую значение изображения и помещаю его в скрытое поле ввода для отправки. Кто-нибудь может помочь?

$('button[type="submit"]').click(function() {
    console.log(signaturePad.toDataURL());
    $('input[type=hidden]').val(signaturePad.toDataURL());
});

1 Ответ

0 голосов
/ 19 января 2020

Очевидно, я забыл, что laravel дает скрытый ввод, содержащий токен CSRF, который я изменяю вместе с jQuery кодом

$('button[type="submit"]').click(function() {
    console.log(signaturePad.toDataURL());
    $('input[type=hidden]').val(signaturePad.toDataURL());
});

Спасибо всем

...