Фильтровать токен CSRF для защиты от CSRF

Я следую за этой статьей http://blog.neoxia.com/laravel4-and-angularjs/ настроить и отфильтровать токен CSRF.
Я могу заставить его работать на локальном сервере, но после того, как я развернул и протестировал его, я продолжаю получать «код состояния 418». Любая идея?

Ниже мой код:

Route.php:

// Route to filter CSRF
Route::filter('serviceCSRF',function(){
if (Session::token() != Request::header('csrf_token')) {
return Response::json([
'message' => 'Security token doesn\'t match, possible CSRF attack.'
], 418);
}
});

// Route for authentication
Route::group(['prefix' => 'api/auth', 'after' => 'allowOrigin'], function() {

Route::get('check', [
'as'=>'check_auth_path',
'uses'=>'SessionsController@check'
]);

Route::post('login', [
'as'=>'login_path',
'uses'=>'SessionsController@login'
]);

Route::get('sentryLogout', [
'as'=>'logout_path',
'uses'=>'SessionsController@logout'
]);
});

Контроллер сессий:

class SessionsController extends \BaseController {

public function __construct() {
$this->beforeFilter('serviceCSRF');
}
...

app.js:

var xhReq = new XMLHttpRequest();
xhReq.open("GET", "//" + window.location.hostname + "/api/csrf", false);
xhReq.send(null);

app.constant("CSRF_TOKEN", xhReq.responseText);

app.run(function ($window, $couchPotato, $rootScope, $state, $stateParams, $http, CSRF_TOKEN) {
app.lazy = $couchPotato;
$rootScope.$state = $state;
$rootScope.$stateParams = $stateParams;
// editableOptions.theme = 'bs3';

$http.defaults.headers.common['csrf_token'] = CSRF_TOKEN;

// watch for location path change
$rootScope.$on("$locationChangeStart",function() {

....

-2

Решение

Решаемые. Причина в том, что Request :: header (); невозможно интерпретировать параметр с подчеркиванием (csrf_token). Итак, после того как я изменился на

$http.defaults.headers.common['csrfToken'] = CSRF_TOKEN;

и это работает!

Благодаря rvs1977 от (https://github.com/laravel/framework/issues/1655#issuecomment-20595277)

0

Другие решения

Других решений пока нет …