【问题标题】:How to use Postman for Laravel $_POST request如何使用 Postman 处理 Laravel $_POST 请求
【发布时间】:2016-05-10 07:57:05
【问题描述】:

如何尝试使用 Postman 向 Laravel 应用发送发布请求?

通常 Laravel 有一个 csrf_token,我们必须通过 POST/PUT 请求传递它。如何在 Postman 中获取和发送此值?是否有可能不关闭 CSRF 保护?

【问题讨论】:

  • 但是,如果你真的想要 csrf_token,你可以向路由发出 get 请求,然后手动插入 postman 中生成的令牌。 [不是真正的解决方案]

标签: laravel postman


【解决方案1】:

编辑:

等等,我看错了这个问题。你想在不关闭 CSRF 保护的情况下这样做吗?就像 Bharat Geleda 说的:你可以制作一个只返回令牌的路由,然后手动将其复制到邮递员的 _token 字段中。

但我建议您从 CSRF 保护中排除您的 api 调用,如下所示,然后添加某种 API 身份验证。

你运行的是哪个版本的 laravel?

Laravel 5.2 及更高版本:

自 5.2 起,CSRF 令牌仅在带有 web 中间件的路由上需要。所以把你的 api 路由放在组外,用web 中间件。

有关详细信息,请参阅 documentation 中的“默认路由文件”标题。

Laravel 5.1 和 5.2:

您可以像这样在VerifyCsrfToken 中间件中排除不应具有 CSRF 保护的路由:

class VerifyCsrfToken extends BaseVerifier
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'api/*',
    ];
}

有关详细信息,请参阅“从 CSRF 保护中排除 URI”标题 documentation

【讨论】:

  • 谢谢,是的,这更有意义,对于 API 而不是 CSRF,使用身份验证是最好的选择
  • 不能让它在 Laravel 5.5 中工作。邮递员只显示“页面因不活动而过期” - 这意味着令牌被拒绝/或不起作用..?
  • @Inigo 那是 TokenException 的新页面,所以你的令牌被拒绝了。可能是因为您的会话无法正常工作。检查您的存储文件夹是否可写入会话。
  • @Hilmanrdn:有点晚了,但我建议同时使用这两种方法——它们旨在解决完全不同的安全漏洞。
【解决方案2】:

如果您将会话存储在 Cookie 中,则可以从开发者工具中的身份验证请求中获取 Cookie。

复制该 Cookie 并将其粘贴到您的 POSTMAN 或 Paw 请求的标头中。

这种方法允许您将 API 测试限制在当前会话中。

【讨论】:

  • 我得到了 CSRF 令牌不匹配。
【解决方案3】:

1.您可以使用控制器创建一个新路由来显示 csrf 令牌,并借助以下功能。 (在路由上使用 Get 请求)

   public function showToken {
      echo csrf_token(); 

    }

2.选择 postman 上的 Body 选项卡,然后选择 x-www-form-urlencoded。
3.复制token并粘贴到postman中作为key的值_token。
4.在您的 URL/端点上执行您的发布请求

【讨论】:

    【解决方案4】:

    在标头中,在发出请求之前添加 cookie、XSRF-TOKEN cookie 和应用程序 cookie。即 yourappname_session

    【讨论】:

      【解决方案5】:

      在 laravel 中,5.3.转到 app/Http/Kernel.php 找到 middlewareGroups 然后评论 VerifyCsrfToken。因为它会在为您的请求提供服务之前执行所有中间件。

      protected $middlewareGroups = [
                  'web' => [
                      \App\Http\Middleware\EncryptCookies::class,
                      \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                      \Illuminate\Session\Middleware\StartSession::class,
                      \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                     ***// \App\Http\Middleware\VerifyCsrfToken::class,***
                      \Illuminate\Routing\Middleware\SubstituteBindings::class,
                  ],
      
                  'api' => [
                      'throttle:60,1',
                      'bindings',
                  ],
              ];
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
      • 原因是在 post request laravel 5.3 检查 csrf 令牌。评论此行后,我们阻止申请 csrf 令牌验证。
      • 这是个坏主意,因为现在您的所有路由都没有 CSRF 保护。 en.wikipedia.org/wiki/Cross-site_request_forgery
      • 对 API 路由禁用它是可以的,因为您可以对这些路由实施身份验证,从而再次保护它们。
      猜你喜欢
      • 1970-01-01
      • 2021-07-27
      • 2014-08-26
      • 2017-11-08
      • 1970-01-01
      • 2019-05-08
      • 2017-03-01
      • 2019-02-08
      • 1970-01-01
      相关资源
      最近更新 更多