Laravel verifyCsrfToken 接受带有通配符的 URL?

问题描述 投票:0回答:2

我尝试构建自己的 API。我开始所以目前我唯一的模型将是“用户”。这是我想如何调用我的 API :

HTTP/POST http://example.com/api/user/         # get all the users
HTTP/POST http://example.com/api/user/1        # get the user with id "1"
HTTP/POST http://example.com/api/user/1/delete # delete the user with id "1"
...

所以我的文件

routes/web.php
看起来像这样:

<?php    
    Route::group(['prefix' => 'api'], function() {
    
        Route::group(['prefix' => 'user'], function() {
            Route::post('/', 'ApiController@allUsers');
        });
    });
?>

但是它不会工作,因为我不通过

Route::resource
静态方法,而是通过常规
Route::post
方法。所以问题是
VerifyCsrfToken
中间件将触发并尝试检查我的 CSRF 令牌,但由于我希望我的 API 将来可以被许多其他建议使用,所以我更喜欢使用我自己的安全系统(这将是一个公共的) -私钥对,但现在我只想检查我通过API分发的数据的完整性,然后我将设置安全算法)。

好消息是 Laravel 非常干净,允许您在

VerifyCSRFToken
数组中添加例外 URL,其形状如下:

<?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 = [
        'api/user',
        'api/user/{howCanIManageTheWildCard}',
        'api/user/{howCanIManageTheWildCard}/delete',
        ...
    ];
}

?>

问题:

你在上面的中间件上看到我有两个问题:

  1. 我必须手动设置我的所有路线(最后可能很长)
  2. 我不知道中间件是否能够处理任何通配符

那么我可以提供一个解决方案,让我可以使用像

api/*
这样的 URL 通配符吗?这样就方便多了!

php api laravel-5 middleware laravel-middleware
2个回答
9
投票

您可以使用

/*

排除 URL

例如。 您可以使用

api/user
 代替 
api/user/*

阅读这里

只是一个建议

由于您正在使用 Laravel 构建 API,因此您可以将所有 API 路由放入

api.php
路由文件中,而不是
web.php
路由文件中,在这种情况下,您无需通过 CSRF 令牌 来发送 API 路由请求。 默认情况下,所有 API 路由都会像
example.com/api/<route>
一样,您不必将其分组。 你可以阅读更多关于 Laravel 路由 here

很乐意提供帮助:):):)


0
投票

有时我们使用简单的 URL,有时 URL/Route 带有一些值。所以这种情况你可以使用这两个代码。更改文件中的代码

App\Http\Middleware\VerifyCsrfToken.php 和 $ except =[]

简单路线

$except =['http://127.0.0.2/oams/public/oams/payment/success']

动态路线

 // http://127.0.0.2/oams/public/oams/payment/{RandCode}/success
$except =['http://127.0.0.2/oams/public/oams/payment/*']
© www.soinside.com 2019 - 2024. All rights reserved.