我试图构建自己的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"
...

所以我的文件看起来是这样的:
<?php
    Route::group(['prefix' => 'api'], function() {

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

但它不会起作用,因为我没有通过静态方法,而是使用常规方法。所以问题是routes/web.php中间件将触发并尝试检查我的csrf令牌,但是由于我希望我的api在未来被许多其他建议所使用,我更喜欢使用我自己的安全系统(这将是一个公共-私有密钥对,但现在我只想检查通过api分发的数据的完整性,然后我将设置安全算法)。
好消息是,laravel非常干净,允许您在Route::resource数组中添加异常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',
        ...
    ];
}

?>

问题:
你看上面的中间件我有两个问题:
我将不得不手动设置我的所有路线(在最后可能很长)
我不知道中间件是否能够处理任何通配符
所以我可以提供一个解决方案,让我做一个像Route::post这样的url通配符吗?这样就容易多了!

最佳答案

您可以使用/*排除url
如。
您可以使用api/user
阅读here
只是个建议
由于您正在使用laravel构建一个api,因此可以将所有api路由放入api/user/*路由文件,而不是api.php路由文件,在这种情况下,您不必为api路由上的post请求传递csrf令牌。
默认情况下,所有的api路由都是web.php,您不必对其进行分组。
您可以阅读更多关于laravel路由here
乐于帮助:):):)

10-05 21:24
查看更多