📜  如何在路由 laravel 中排除 csrf - PHP (1)

📅  最后修改于: 2023-12-03 15:38:41.952000             🧑  作者: Mango

如何在路由 Laravel 中排除 CSRF

在 Laravel 应用程序中,默认情况下启用了 CSRF(跨站请求伪造)保护。这意味着任何使用 HTTP 动词(POST、PUT、DELETE)的表单提交都必须包含一个 CSRF 令牌。如果您使用了前端框架,例如 Vue.js 或 React,这可能会引起一些问题。 在这种情况下,您可以考虑在路由中排除 CSRF 保护。下面介绍如何在 Laravel 中执行此操作。

在 Laravel 5.6 中排除 CSRF 保护

Laravel 5.6 支持在路由中排除 CSRF 保护。这可以通过设置 except 属性来实现路由组件。

Route::group(['middleware' => 'web', 'except' => ['my/route']], function() {
    // 添加您的路由代码
});

在上面的示例中,我们排除名称为 my/route 的路由。请将其替换为您要排除的路由名称。这将禁用指定路由的 CSRF 保护。

在 Laravel 5.5 以前的版本中排除 CSRF 保护

在 Laravel 5.5 以前的版本中,您需要创建自定义中间件来排除路由的 CSRF 保护。下面展示如何执行此操作。

首先,在项目中创建一个新的中间件。您可以使用以下 Artisan 命令:

php artisan make:middleware CsrfExclusionMiddleware

然后,在 app/Http/Middleware/CsrfExclusionMiddleware.php 文件中添加以下代码:

namespace App\Http\Middleware;

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

class CsrfExclusionMiddleware extends BaseVerifier
{
    protected $except = [
        'my/route',
        'my/other/route',
    ];
}

在上面的代码中,我们创建了一个自定义中间件 CsrfExclusionMiddleware,并设置了要排除 CSRF 保护的路由。请将其替换为您需要排除的实际路由。

接下来,我们需要将自定义中间件注册到中间件组中。打开 app/Http/Kernel.php 文件,并将 CsrfExclusionMiddleware 添加到 $routeMiddleware 属性中:

protected $routeMiddleware = [
    // 其他中间件
    'csrf.exclusion' => \App\Http\Middleware\CsrfExclusionMiddleware::class,
];

在上面的代码中,我们将 CsrfExclusionMiddleware 中间件添加到 $routeMiddleware 属性中,并将其键设置为 csrf.exclusion。现在,您可以将注册的 csrf.exclusion 中间件应用于任何需要排除 CSRF 保护的路由。

Route::group(['middleware' => ['web', 'csrf.exclusion']], function() {
    // 添加您的路由代码
});

在上面的示例中,我们将 csrf.exclusion 中间件应用于所有路由组件,这将禁用这些路由的 CSRF 保护。

结论

通过按照上述步骤,您可以在路由中排除 Laravel 应用程序中的 CSRF 保护。这对于使用前端框架的开发人员非常有用,因为它使您避免在每个表单中都添加 CSRF 令牌的繁琐工作。