【问题标题】:Laravel 419 error on POST request via POSTMAN通过 POSTMAN 发出 POST 请求时出现 Laravel 419 错误
【发布时间】:2019-02-22 15:59:49
【问题描述】:

我正在尝试通过 POSTMAN 应用程序向运行 Laravel 5.6 的 API 发送 POST 请求。

我的路线如下:

Route::post('/charge','Charge@index');

Charge 和 index 函数只是简单地 var_dumps post 参数:

class Charge extends Controller
{
    public function index()
    {
        var_dump($_POST);
    }

}

我得到的响应是 419 未知状态错误。我不知道问题是什么。

我不确定这里还需要包含哪些其他信息,但请询问是否需要其他任何信息来帮助解决此问题。

谢谢, J

【问题讨论】:

  • 您从 POSTMAN 发送数据的方法是什么
  • 我在 POSTMAN 中选择了 POST,然后我添加了一个名为 'test' 的键,其值为 'hello world'。我尝试将其添加为 POSTMAN 中可用的每个键/值选项,并且都给出相同的 419 响应。
  • Laravel 在 CSRF 验证失败时抛出 419 错误。另外,不要尝试使用$_POST 访问表单数据。看来您可以阅读 Laravel 文档来学习以下基础知识:laravel.com/docs
  • 我转储 $_POST 只是为了调试。我没有意识到 CSRF 令牌,我将回到文档中。谢谢你
  • @JamLis 你仍然应该使用Request 类来访问表单数据,即使是为了“调试”目的。

标签: laravel post


【解决方案1】:

这可能是因为您没有发送带有表单数据的 csrf 令牌。

在 laravel 中,每次请求都必须发送 csrf 令牌。

如果您不想发送,请在 app/http/middleware/VerifyCsrfToken.php 文件中提及您的方法名称。

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{

    protected $addHttpCookie = true;

   protected $except = [
    'auth/facebook/callback',
    'auth/google/callback',
];
}

【讨论】:

    【解决方案2】:

    如果在标题上使用邮递员添加

    (KEY)                   (值)
    X-CSRF-TOKEN   yvthwsztyeQkAPzeQ5gHgTvlyxHfsAfE

    你可以通过添加找到VALUE

    public function index()
    {
        return csrf_token(); 
    }
    

    并在您的路线名称上发送 GET,然后您将获得 csrf 的 VALUE

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我找到的唯一解决方案是从 csrf 验证文件中删除该确切的 url,该文件名为 VerifyCsrfToken.php,位于

      app\Http\Middleware\VerifyCsrfToken.php

      打开该文件后,您只需将您正在执行发布请求的确切网址放在 except 变量中,如下所示:

      <?php
      
      namespace App\Http\Middleware;
      
      use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
      
      class VerifyCsrfToken extends Middleware
      {
          /**
           * The URIs that should be excluded from CSRF verification.
           *
           * @var array
           */
          protected $except = [
              //
              'http://localhost/api2/public/user' //This is the url that I dont want Csrf for postman.
          ];
      }
      

      之后我可以向邮递员发出我的发帖请求。

      PD:这是针对开发环境的

      【讨论】:

        【解决方案4】:

        您需要在发送请求时提供 CSRF 令牌,在这种情况下您需要 CSRF 令牌。

        在 web.php 上生成 CSRF 令牌

            Route::get('/token', function () {
                return csrf_token(); 
            });
        

        使用令牌发送请求 | 在标题上添加以下内容 |令牌应该在每次请求时更改

        (KEY)           (VALUE)
        X-CSRF-TOKEN    MGpzhSLdVWdB7ddQSR8B6iu3A89A6LW7UPT0zmO2
        

        【讨论】:

          【解决方案5】:

          我正在从 POSTMAN 发出获取请求并遇到 419 错误。但是,如果您在发出 GET 请求并面临状态 419 时仍然想知道如何找到 csrf 令牌。就我而言,我通过在标题中添加 user-agent: xxxx 令牌解决了这个问题。

          例子:

          user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
          

          【讨论】:

            猜你喜欢
            • 2020-09-21
            • 2020-01-10
            • 2021-06-14
            • 2022-01-06
            • 2018-04-03
            • 2018-07-17
            • 2021-12-13
            • 2017-09-02
            • 2018-08-03
            相关资源
            最近更新 更多