来自另一个域的发布请求结果为TokenMismatchException

时间:2017-04-02 14:01:23

标签: php laravel laravel-5

我正在与银行api合作。
银行向我的网站发送了一个帖子请求,但没有返回,没有令牌字段是他们的请求,我面临TokenMismatchException

我该如何解决这个问题?
这是相应的代码:

public function submitPayment()
{  
    $api = 'test';
    $amount = '3443354';
    $redirect = URL::to('new-order/after-payment');
    $result = $this->send($api, $amount, $redirect);
    $result = json_decode($result);

    return redirect("https://example.com/$result->transId");
}

1 个答案:

答案 0 :(得分:1)

简而言之,您希望将默认的_token重命名为Laravel的CSRF令牌字段名称,而不是其他内容,

您可以从 App \ Http \ Middleware \ VerifyCsrfToken 类覆盖功能照亮\ Foundation \ Http \ Middleware \ VerifyCsrfToken @ tokensMatch(); 并更改CSRF参数名称

您可以在 App \ Http \ Middleware \ VerifyCsrfToken 文件中添加以下代码。

   /**
     * Determine if the session and input CSRF tokens match.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return bool
     */
    protected function tokensMatch($request)
    {
        $sessionToken = $request->session()->token();

        $token = $request->input('_csrf_token') ?: $request->header('X-CSRF-TOKEN');

        if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
            $token = $this->encrypter->decrypt($header);
        }

        if (! is_string($sessionToken) || ! is_string($token)) {
            return false;
        }

        return hash_equals($sessionToken, $token);
    }

在上述功能中,CSRF字段从_csrf_token

更改为_token