仅针对单一方法删除 csrf 令牌 - Laravel

Posted

技术标签:

【中文标题】仅针对单一方法删除 csrf 令牌 - Laravel【英文标题】:Remove csrf token only for single method - Laravel 【发布时间】:2018-06-28 14:35:21 【问题描述】:

我正在使用 paytabs 支付网关 API。在那个 api 中,必须给出一个重定向 url,这样一旦交易完成,页面就会自动重定向到你给定的重定向 url。 url 是 GET url,但由于 api 的响应是 POST 类型,我无法使用 get url。为了解决这个问题,我将该路由设为 POST url,但通过将其设为 post 方法,我没有得到任何 CSRF 令牌。最后,我得到了这个问题。

TokenMismatchException in VerifyCsrfToken.php line 68:

有什么方法可以让我只为单个 POST url 禁用 CSRF 令牌功能?

--建议尝试-- 我按照你的建议做了这个

class VerifyCsrfToken extends Middleware

    protected $except = [
        'signup/complete',
    ];

现在得到了

Class 'Middleware' not found

【问题讨论】:

你用的是哪个版本的 laravel 5? 【参考方案1】:

来自the docs:

通常,您应该将这些类型的路由放置在 RouteServiceProvider 应用于 routes/web.php 文件中的所有路由的 Web 中间件组之外。但是,您也可以通过将它们的 URI 添加到 VerifyCsrfToken 中间件的 $except 属性来排除路由:

class VerifyCsrfToken extends Middleware

    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];

【讨论】:

感谢@alexey 的帮助,但它给出了另一个错误并停止了我的每条路线。 @nerdyDev 编辑现有的中间件,而不是创建一个新的。 我已经更新了这个问题,在这个问题下,我已经按照您的说法对 web.php 进行了更改,并且也对问题做出了回应。谢谢 这个网址不在中间件下,它只是单独的。我在表单中提供了 //////// 来处理这个令牌,而不是通过路由。 这很有效@alexey 非常感谢。你应该投赞成票。再次感谢。【参考方案2】:

您可以在 csrf 中间件中例外。转到app/http/Middleware/VirefyCsrfToken.php

class VerifyCsrfToken extends BaseVerifier
    protected $except = [
     'route url1',
     'route url2',

    ]

【讨论】:

【参考方案3】:

关于如何使用 localhost 在你的项目文件夹/app/http/middleware/VerifyCsrfToken.php 编辑

protected $except = [
    //
    'http://localhost/blog/return_url',  // your url
];

【讨论】:

以上是关于仅针对单一方法删除 csrf 令牌 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章

403 错误 - 模态窗口中的 CSRF 令牌

Jquery 和 Django CSRF 令牌

为啥 Express/Connect 会在每个请求上生成新的 CSRF 令牌?

405 方法不允许,弹簧启动,但我使用了 csrf 令牌头

Django 测试开发2

通过 AJAX 获取 CSRF 令牌