【发布时间】:2017-08-10 03:27:09
【问题描述】:
我尝试构建自己的 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 非常干净,可以让你将异常 URL 添加到 VerifyCSRFToken 数组中,形状如下:
<?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',
...
];
}
?>
问题:
您在上面的中间件上看到我有 2 个问题:
- 我将不得不手动设置我的所有路线(最后可能很长)
- 我不知道中间件是否能够处理任何通配符
那么我可以提供一个解决方案,让我做一个像 api/* 这样的 url 通配符吗?这样就容易多了!
【问题讨论】:
标签: php api middleware laravel-5.4 laravel-middleware