仅针对单一方法删除 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的主要内容,如果未能解决你的问题,请参考以下文章