2015-11-13 125 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

我对此不太确定,但是我也像你一样穿越了相同的情况,并在中间件中处理这些情况! –