Laravel除了令牌不匹配错误

时间:2015-11-13 21:16:19

标签: laravel token

我的网址

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

VerifyCsrfToken除外。

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

但我有Token Mismatch Error。

更新

我将数据发布到外部网页(银行服务器)并且他们正在发布到我的网站。

2 个答案:

答案 0 :(得分: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);
        }

通过这样做,您可以检查请求是否与外部应用程序具有的参数值不匹配。

希望,这有助于你

答案 1 :(得分:0)

我解决了这个问题。

在Except Property中,我们必须编写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().'/'

现在我们可以使用except属性而无需编写语言路径。