@naneri
PHP разработчик.

Как правильно переписать CSRF фильтр в Laravel для Angular?

Хочу правильно переписать CSRF фильтр в Ларавел для работы с AngularJS.

В данное время он выглядит так:
Route::filter('csrf', function()
{
	if (Session::token() != Input::get('_token'))
	{
		throw new Illuminate\Session\TokenMismatchException;
	}
});


Но для Ajax запросов это не работает.
У Jquery можно переписать фильтр, добавив CSRF в Header каждого запроса:

$.ajaxSetup({
   headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
});


И его обрабатывать:

Route::filter('csrf', function() 
{
    $token = Request::ajax() ? Request::header('X-CSRF-Token') : Input::get('_token');
    if (Session::token() != $token){
        throw new Illuminate\Session\TokenMismatchException;
    }
});


Как правильно переписать для Angularjs?
  • Вопрос задан
  • 3377 просмотров
Решения вопроса 1
AmdY
@AmdY
PHP и прочие вебштучки
app.config([
        "$httpProvider", function($httpProvider) {
             $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=_token]').attr('content');
        }
]);
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
miraage
@miraage
Старый прогер
Скажу, как делают в Rails - а Вы проведите аналогию.

before_action у всех контроллеров:
добавить куку XSRF-TOKEN со значение Session::token()

В методе валидации CSRF (только для POST, PUT, PATCH, DELETE запросов):
Request::header('X-XSRF-TOKEN') == Session::token()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы