2014-09-10 23 views
1

我有一个应用程序使用角度js向服务器发出$ http GET请求。一个页面特别具有一种形式,得到嵌入到它CSRF令牌如下Laravel csrf标记不匹配ajax GET请求

<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令牌被整合,但是当我做一个GET请求注册的URL,我得到令牌不匹配。基本上每次向服务器发送一个ajax请求时都会生成一个新的标记,因此当我在控制器中比较它时,输入表单中提取的初始标记不匹配。任何人都可以告诉我在这种情况下csrf的有效性如何?

感谢

回答

2

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

+0

嗨,那么这是否意味着我只能将csrf标记嵌入到post请求中(或除GET以外的任何其他东西)?我的表单基本上是为了在数据库中创建一个对象。用户不会登录。 – 2014-09-10 21:57:13

+0

如果任何人*可以创建资源,那么保护它免受CSRF影响并不大。 – 2014-09-10 22:18:52

+0

好吧,我正在尝试发出POST请求,并在Laravel中收到令牌不匹配错误。你知道为什么会这样吗? – 2014-09-23 22:09:55