2015-11-13 60 views
0

我的URLLaravel除令牌不匹配錯誤

http://laravel/tr/order/fp1/success 

VerifyCsrfToken除外。

protected $except = [ 
    'order/*' 
]; 

但我有令牌不匹配錯誤。

更新:

我張貼數據,以外部網頁(銀行服務器),他們被張貼到我的網站。

+0

如果手動生成表單,則放置'_token'? –

+0

對不起。我更新了。 –

+0

然後,您應該可以禁用該特定請求的csrf過濾器 –

回答

0

我解決了這個問題。

在除了屬性之外,我們必須編寫URI。但我沒有寫語言路徑。

protected $except = [ 
    'tr/order/*' 
]; 

如果我編寫語言路徑。這是工作。但硬編碼語言路徑不合邏輯。

而且我重寫了Laravel中的BaseVerifier的shouldPassThrough。

protected $except = [ 
    'order/*', 
]; 

protected function shouldPassThrough($request) 
{ 
    foreach ($this->except as $except) { 
     if ($request->is(trim(Lang::locale().'/'.$except, '/'))) { 
      return true; 
     } 
    } 

    return false; 
} 

我們增加Lang::locale().'/'

現在,我們除了可以使用屬性,而無需編寫語言路徑。

0

根據Op的評論,似乎請求來自外部網站,我們無法從我們的應用程序生成csrf標記。

因此,有兩種可能的解決方案

方法1:

應該從以前要求的應用CSRF令牌,然後發送帶有令牌

方法請求時請求2:

您應該附加傳入請求的參數,並在app\Http\Middleware\VerifyCsrfToken.php

$paramExist= $request->yourSecretParam; 
    #return parent::handle($request, $next); 
     if(isset($paramExist)) 
     { 
      $yourSpecialkey ='a2$%$'; #This to check whether the param has the value that you set 
      if($paramExist==$yourSpecialKey) 
      { 
       return $next($request); 
      } 
      else 
      { 
       return parent::handle($request, $next); 
      } 

     } 
     else 
     { 
      return parent::handle($request, $next); 
     } 

通過這樣做,您可以檢查請求是否與外部應用程序具有的參數值不匹配。

希望能幫到你

+0

爲什麼我們不會使用受保護的屬性$除外? –

+0

我對此不太確定,但是我也像你一樣穿越了相同的情況,並在中間件中處理這些情況! –