有没有办法从 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。因为例外列表不是静态的,所以无法更改它。
我知道 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。因为例外列表不是静态的,所以无法更改它。