在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,但没有运气。

不,没有。中间件总是在app/Http/Kernel.php类的$middleware属性中提供时执行。

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

如果你真的需要路由上的异常,你可以简单地要求手动将异常添加到VerifyCsrfToken类中。

VerifyCsrfToken类中的$except数组是无法被服务容器访问的,据我所知。即使您可以找到创建中间件实例的方法,内核也只会创建中间件类的新实例。因为异常列表不是静态的,所以不可能改变它。

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

    <?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/*',
    ];
}