2014-09-10 96 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