【问题标题】:Using Goutte / Guzzle with Laravel to Submit Form with CSRF使用 Goutte / Guzzle 和 Laravel 使用 CSRF 提交表单
【发布时间】:2015-06-22 14:12:15
【问题描述】:

我有两个网站(都是我的),我正在测试 Guzzle。

我正在尝试提交搜索表单。此搜索表单具有标准 Laravel CSRF 令牌隐藏字段,自动生成“_token”。

使用 goutte 提交字段时会出错。在网站上查看我的日志,我可以看到它是 Laravel "TokenMismatchException"

我是否需要在 goutte 中做一些特别的事情来确保它发布了自动生成的“_token”隐藏字段?

【问题讨论】:

  • 如果您对我下面的回答感到满意,您可以接受:)

标签: php laravel guzzle goutte


【解决方案1】:

从 Laravel 5.1 开始,在 app/Http/Middleware/VerifyCsrfToken.php 中,您可以通过将相关路由添加到 $except 数组来禁用 CSRF 保护。像这样:

protected $except = [
    '/api/v1/list', //This route won't have CSRF protection
];

【讨论】:

    【解决方案2】:

    您需要为该路由禁用 CSRF 保护。

    app/Http/Middleware/VerifyCsrfToken.php 中将此代码添加到handle() 方法的开头:

    $openRoutes = ['free/route', 'free/too'];
    
    foreach($openRoutes as $route) {
        if ($request->is($route)) {
            return $next($request);
        }
    }
    

    【讨论】:

    • 谢谢,我想这是一个选项。在这种情况下,常规搜索表单上确实不需要 CSRF。但是将来,如果我尝试登录我的网站,并且不想禁用令牌,那我有什么选择呢?我曾假设,由于该字段是预先填充的,因此它只会与搜索字段本身一起提交。
    • 如果我正确理解了您的问题,您不必担心,因为使用此代码,您只会为该路由禁用 CSRF 保护。在其他表单上,CSRF 保护将照常工作。
    • 对不起,我的意思是,如果我想使用 Goutte/Guzzle 登录,而不删除 CSRF(而不是像上面那样简单地进行搜索)
    • 您可以使用 Guzzle 使用 CSRF 令牌登录,但它有点复杂,您可以在此处找到示例:stackoverflow.com/q/22756009/1331425
    猜你喜欢
    • 2016-10-27
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2018-11-12
    • 2020-10-26
    • 2013-12-25
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多