Laravel csrf令牌与ajax GET请求不匹配

时间:2014-09-10 21:36:42

标签: php angularjs laravel-4 csrf

我有一个使用angular js的应用程序向服务器发出$ http GET请求。一个页面特别有一个表单,它将csrf标记嵌入其中,如下所示

<input type="hidden" ng-model="token" value="{{{ Session::getToken() }}}">

在我的控制器中,我有以下代码:

public function getMethod($arg, $token) 
{
    /*Check for csrf token validity*/
    if ($token != Session::token()) {
        return Response::json(
                array(),
                403
        );
    }
........
}

从客户端我提出这样的请求:

var arg = $scope.arg;
var get_url = '/url/routing/to/controller/arg/' + arg + '/' + $scope.token;

$http({method: 'GET', url: get_url})
    .success(function(data, status, headers, config) {
        //Do stuff after success
        .............
    })
    .error(function(data, status, headers, config) {
        //Handle error
        .......
    });

我不确定如何将GET请求与csrf令牌集成,但是当我向注册的URL发出GET请求时,我得到令牌不匹配。基本上每次向服务器发送ajax请求时都会生成一个新令牌,因此当我在控制器中对它进行比较时,在表单输入元素中提取的初始令牌不匹配。谁能告诉我在这种情况下如何才能完成csrf的有效性呢?

由于

1 个答案:

答案 0 :(得分:2)

您不应该通过GET添加/修改资源,因此需要获取请求的令牌。只有在使用当前登录用户的凭据更改添加资源到您的应用程序的方法中才需要CSRF令牌。< / p>