javascript - Laravel - Dropzone.js 的 TokenmissmatchException

标签 javascript laravel laravel-4 dropzone.js

我使用 dropzone.js 将图像上传到我的网站,但 Laravel 总是报告 TokenMismatchException,尽管我在表单中使用 Form::open() ,它会自动添加 _token .

这是我的代码:

{{ Form::open(["class" => "dropzone", "id" => "imgUpload", "action" => "UploadsController@uploadImage"]) }}
    <div class="fallback">
        {{ Form::submit() }}
    </div>
{{ Form::close() }}

js

Dropzone.options.imgUpload = {
        paramName: "file",
        dictDefaultMessage: "Pošalji sliku",
        acceptedFiles: "image/*",
        previewsContainer: ".dropzone-previews",
        uploadprogress: function(progress, bytesSent){
            console.log(progress);
   }
};

如何解决这个问题?

最佳答案

通过 AJAX 发布时,Dropzone 似乎不包含 token 。你可以使用类似的东西来让它这样做......

Dropzone.options.imgUpload = {
    paramName: "file",
    dictDefaultMessage: "Pošalji sliku",
    acceptedFiles: "image/*",
    previewsContainer: ".dropzone-previews",
    uploadprogress: function(progress, bytesSent) {
        console.log(progress);
    },
    sending: function(file, xhr, formData) {
            // Pass token. You can use the same method to pass any other values as well such as a id to associate the image with for example.
            formData.append("_token", $('[name=_token']).val()); // Laravel expect the token post value to be named _token by default
        }
};

我在这里找到了该片段... http://laravel.io/forum/04-17-2014-tokenmismatchexception-with-dropzonejs

通过 AJAX 提交的 token 和表单似乎也存在一些问题。在这种情况下,您将需要在初始化 dropzone 时包含附加 header 。

Dropzone.options.imgUpload = {
    paramName: "file",
    dictDefaultMessage: "Pošalji sliku",
    acceptedFiles: "image/*",
    previewsContainer: ".dropzone-previews",
    headers: {
        "X-CSRF-Token": $('[name=_token').val())
    },
    uploadprogress: function(progress, bytesSent) {
        console.log(progress);
    }
};

要利用此功能,请修改 filters.php 中的 CSRF 过滤器,以检查该 header (如果我们通过 AJAX 提交)。

Route::filter('csrf', function() 
{
    $token = Request::ajax() ? Request::header('X-CSRF-Token') : Input::get('_token');

    if (Session::token() != $token) {
        throw new Illuminate\Session\TokenMismatchException;
    }
});

关于javascript - Laravel - Dropzone.js 的 TokenmissmatchException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25627269/

相关文章:

javascript - jquery 在同一 DOM 中的文本之前插入

javascript - 传递一个带有参数的函数

php - 如何使用 MAMP 将 Laravel 5 应用程序连接到 mysql?

javascript - 从 Laravel 数据库中实时提取数据

javascript - 如何从 jQuery UI slider 获取值?

javascript - $ ('' ) 在 JavaScript 中意味着什么?

php - 使用 Laravel DB Builder 时捕获 mysql *警告*(不是异常(exception))?

javascript - jquery数组到字符串以显示文本框输入

php - 使用山魈发送邮件。异步不起作用

laravel - 如何使用 Eloquent 删除表中的所有行?