gpt4 book ai didi

php - laravel VerifyCsrfToken 使用通配符排除 url?

转载 作者:搜寻专家 更新时间:2023-10-31 21:00:55 26 4
gpt4 key购买 nike

我尝试构建自己的 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 token ,但由于我希望我的 api 在未来被许多其他建议使用,我更喜欢使用我自己的安全系统(这将是一个公私 key 对,但现在我只想检查我通过 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',
...
];
}

?>

问题:

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

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

那么我能否提供一个解决方案,让我可以使用 api/* 之类的 url 通配符?像这样会容易得多!

最佳答案

您可以使用 /* 排除 URL

例如。而不是 api/user你可以使用 api/user/*

阅读here

只是一个建议

因为您正在使用 Laravel 构建 API,您可以将所有 API 路由放在 api.php 中路由文件而不是 web.php路由文件,在这种情况下,您不必为 API 路由上的发布请求传递 CSRF token 。所有的 API 路由都像 example.com/api/<route>默认情况下,您不必将其分组。你可以阅读更多关于 Laravel 路由的信息 here

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

关于php - laravel VerifyCsrfToken 使用通配符排除 url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42876710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com