有没有办法从 Laravel 5 的包中排除 CSRF 保护的路由?

Is there a way to exclude a route from CSRF protection from within a package in Laravel 5?

我知道 VerifyCsrfToken 中间件 (app/Http/Middleware/VerifyCsrfToken.php) 的 $except 属性,但我正在寻找一种方法来从我的包中做类似的事情 (所以安装它的用户不必为我的工作路线修改他们的 VerifyCsrfToken.php

我可以在我的包上定义路由,但我不知道如何从默认中间件中排除其中一个(或多个)路由。我曾尝试在我自己的包裹上扩展 Illuminate\Foundation\Http\Middleware\VerifyCsrfToken 但没有成功。

是的,它实际上很简单,也包含在位于 here 的文档中,但为了简单起见,这里提供了答案供您参考:

    <?php

namespace App\Http\Middleware;

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

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

不,没有。在您的 app/Http/Kernel.php class.

$middleware 属性 中提供时,始终会执行中间件

这是一件好事。您想让开发人员完全控制他们是否要在他们的应用程序中启用安全检查。

如果您确实需要路线例外,您可以简单地要求手动将例外添加到 VerifyCsrfToken class.

据我所知,VerifyCsrfToken class 中的 $except 数组无法通过服务容器访问。即使您可以找到创建中间件实例的方法,内核也只会创建一个新的中间件实例 classes。因为例外列表不是静态的,所以无法更改它。