2016-12-19 7 views
1

Я уже прочитал некоторые topicsAngular2 и Laravel CSRF защиты

И проблема я столкнулся это лежит в этой части кода

<meta property="csrf-token" name="csrf-token" content="{{ csrf_token() }}"> 

Я использую Angular2 в качестве основного двигателя, который представляемого AJAX запросы к Laravel API и я не использую шаблоны лезвия - просто .html files, поэтому я не могу вызвать функцию PHP csrf_token() из HTML файла

Итак, я добавил временное решение, расширяя свою /var/www/pandacrm/app/Http/Middleware/VerifyCsrfToken.php файл

public function handle($request, Closure $next) 
{ 
    if (! $request->is('api/*')) 
    { 
     return parent::handle($request, $next); 
    } 

    return $next($request); 
} 

Но это, кажется, не лучший способ работать вокруг, есть ли другие решения для решения этой проблемы?

+0

Вы можете отключить промежуточное ПО CSRF (НЕ РЕКОМЕНДУЕТСЯ) или предоставить промежуточное ПО CSRF действительным токеном из вашего представления. Сделать ajax-запросы без какой-либо защиты подделок с помощью кросс-сайта - очень опасная вещь. – Joe

ответ

2

Вы можете создать тег meta с помощью csrf-token с помощью JavaScript в вашем html-файле!

Как это сделать:

Отправить запрос Ajax для Laravel пути, чтобы получить маркер. (return csrf-token в действии Controller) И затем создайте метатег с этим токеном в вашем html-файле.

Но перед этим вам необходимо отключить защиту csrf по этому конкретному маршруту. Существует способ сделать это here для laravel5 и here для 5.3.

Теперь у вас есть метатег с csrf, который может использоваться для других запросов ajax.

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