2016-10-11 4 views
0

Я новичок в Laravel, так что извините за мой код ..Ajax в Laravel 5.3 доступны каждому

Я пытаюсь интегрировать библиотеку Jquery с моим проектом Laravel.

Контроллер

public function index() 
{ 

    return view('products'); 

} 

public function data() 
{ 
    $products = Product::all(); 

    return $products->toJson(); 

} 

Маршрут

Route::get('/products', ['as' => 'products', 'uses' => '[email protected]']); 
Route::get('/products/data', ['as' => 'products.data', 'uses' => '[email protected]']); 

Посмотреть

<script> 

    var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content'); 

    $.ajax({ 
     url: '/products/data/', 
     type: 'GET', 
     data: {_token: CSRF_TOKEN}, 
     dataType: 'JSON', 
     success: function (data) { 
      console.log(data); 
     } 
    }); 

</script> 

Все работает, но если я иду/products/data/Я вижу json в браузере. Этого не должно быть!

Я делаю это правильно? Это правильный способ получить данные json из базы данных в представление?

спасибо.

ответ

2

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

Убедитесь, что информация о пользователях не пересылается через GET Request. Потому что таким образом, кто-то, кто хочет нанести вред вашему сайту, имеет доступ к информации, которую они хотят достичь. Убедитесь, что эти данные перемещаются по POST Request, поэтому они не могут получить доступ к информации очень легко. Также убедитесь, что хеш-информация должна быть только в руках самого пользователя или других доверенных источников.

В этой ситуации я не вижу ничего плохого в вашем подходе с первого взгляда.

Немного больше информации по этой теме можно найти здесь: HTTP Methods: GET vs. POST

+0

Ok спасибо за объяснение. Но разве мне не удастся заблокировать доступ к этому URL-адресу через браузер? – devwebapp

+0

@devwebapp Я не думаю, что это возможно. Например, вы можете получить доступ к URL-адресу «GET», зарегистрировав пользователей для показа продуктов. Но это необязательно. Вы также можете обратиться за запросом «POST», чтобы данные не были доступны на URL-адресе, но вы не отправляете какие-либо данные, поэтому я не думаю, что это требуется в этом сценарии. –

1

Вы можете использовать запрос wantsJson или ajax метод

контроллер

use Illuminate\Http\Request; 

public function data(Request $request) 
{ 
    $products = Product::all(); 

    if ($request->wantsJson()) { 
     return $products; 
    } 

    return abort(404); 
} 
+0

Спасибо. При таком подходе я получаю сообщение об ошибке. «Попытка получить свойство не-объекта». Любая идея почему? – devwebapp

+0

Можете ли вы дать мне более подробную информацию об ошибке? – zorx

Смежные вопросы