2016-10-28 3 views
1

У меня возникла проблема с интеграцией dropzone.js в моем проекте. Я использовал функцию ajax для загрузки изображений и возврата значений. Но я получаю ошибку 302 и ошибку csrf. почему это так? Как решить эту проблему?Интеграция Dropzone в laravel

мой взгляд кодовой страницы

<form method="POST" action="{{lurl('post-events')}}" enctype='multipart/form-data'> 
    <label>event title*</label> 
    <input type="text" class="form-control" name="name" placeholder="give it a short distinct name"> 
    <div class="image_drop"> 
    <!--<img src="images/upload-files-here.png" pagespeed_url_hash="19921898" onload="pagespeed.CriticalImages.checkImageForCriticality(this);"/> 
       --> 
    <div class="dropzone" id="mydropzone" name="mydropzone"> 
    </div> 
    <p>we recommend usung at least a 2160x1080px(2:1ratio) image thats no 
       larger than 10MB learn more.</p> 
    </div> 
</form> 

Я использовал JQuery для вызова Ajax.

$("#mydropzone").dropzone({ url: "event-image" }); 

Route.php

Route::post('event-image','[email protected]'); 

функция контроллера

public function getImage1() { 
    $input = Input::all(); 
    $rules = array(
    'file' => 'image|max:3000', 
); 

    $validation = Validator::make($input, $rules); 

    if ($validation->fails()) { 
    return Response::make($validation->errors->first(), 400); 
    } 

    $file = Input::file('file'); 
    $extension = File::extension($file['name']); 
    $directory = public_path().'/uploads/pictures/events'; 
    $filename = sha1(time().time()).".{$extension}"; 

    $upload_success = Input::upload('file', $directory, $filename); 

    if($upload_success) { 
    return Response::json('success', 200); 
    } else { 
    return Response::json('error', 400); 
    } 
} 

В моей консоли я получаю эту ошибку

POST http://localhost/Classified/en/event-image 302 Found 
GET http://localhost/Classified/en/events?error=CsrfToken 
+0

302 означает Permanent Redirect это означает, что ваш маршрут перенаправить на другую страницу – Kavin

ответ

0

Поскольку вы используете стандартный веб-маршрут, Laravel обеспечит использование кросс-сайта запрашивать безопасность подлога, то есть каждый запрос должен иметь токен, чтобы в основном аутентифицировать, что подписанный пользователь на самом деле вы.

От https://laravel.com/docs/5.3/csrf#csrf-x-csrf-token

$.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });

Это позволит установить CSRF-маркер значения (который автоматически передается с каждым запросом в Laravel) в заголовке х-CSRF-маркер, и позволит вашему запросу иметь согласование жетоны.

Вы также можете отключить токены CSRF или использовать маршрут API, но я не рекомендую его из-за недостатков безопасности, поэтому я не буду рассказывать вам, как это сделать.

Edit: Если вы на самом деле выполнения вызова со всеми данными формы, вы можете просто добавить

{{ csrf_field() }}

в форме, и он должен работать, как ожидалось, а также.

+0

ее не работает, все та же ошибка –

0

я получил ответ

просто изменил Аякс, как

$("#mydropzone").dropzone({ 

     url: "event-image", 
     addRemoveLinks : true, 
     maxFilesize: 3, 
     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 
     } 

     }); 
Смежные вопросы