gpt4 book ai didi

php - Laravel Dingo API 和 Middleware\\VerifyCsrfToken.php 问题

转载 作者:可可西里 更新时间:2023-11-01 12:55:01 28 4
gpt4 key购买 nike

我将 Dingo 与 Laravel 5.1 结合使用来创建简单的 API。

所以在 route.php 我有:

$api = app('Dingo\Api\Routing\Router');

$api->version('v1', function($api) {

$api->get('getvoucher', 'App\Http\Controllers\BitemsController@index');
$api->get('update/{key}', 'App\Http\Controllers\BitemsController@update');
$api->post('store', 'App\Http\Controllers\BitemsController@store');

$api->post('authenticate', 'App\Http\Controllers\AuthenticateController@authenticate');
$api->post('logout', 'App\Http\Controllers\AuthenticateController@logout');
$api->get('token', 'App\Http\Controllers\AuthenticateController@getToken');

});

我的 BitemsController 是:

public function index(Request $request)
{

$bitem = Bitem::where('key',$request->key)->where('id',$request->pin)->first();

return $bitem;
}


public function store(Request $request)
{
$bitem = new Bitem($request->all());
$bitem->save;
return $bitem;
}

现在我使用 POSTMAN 应用程序来测试 API,当我将 GET 发送到 localhost:8888/api/getvoucher 时,一切都很好,但是当我发出 POST 请求来存储一些数据时,我得到了错误:

"message": "500 Internal Server Error",
"status_code": 500,
"debug": {
"line": 53,
"file": "C:\\wamp\\www\\dine\\vendor\\laravel\\framework\\src\\Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken.php",
"class": "Illuminate\\Session\\TokenMismatchException",
"trace": [

postman : enter image description here

为了解决这个问题,我尝试添加:

protected $except = [
'api/*',
];

在中间件 VerifyCsrfToken.php 中但无法正常工作。

请告诉我如何解决我的问题...

最佳答案

要使 Postman 正常工作,您需要发送正确的 CSRF header ,或者在您的路由中删除对它的需求。

根据您的屏幕截图,我假设您的 Dingo API 路由正在使用 API_PREFIX=api in your .env file .

检查 Laravel documentation on CSRF tokens有关这些的更多信息。 gist that @BM2ilabs suggested有一些关于如何找出您在 session 中用于本地测试的 CSRF token 以放入 Postman 的一些基础知识。

如果您不想使用 CSRF 保护,那么使用 $except property on the VerifyCsrfToken middleware as per the Laravel documentation 是正确的- 这也有 come up on Stack Overflow before .在没有看到您的 Kernel 和您正在使用的完整中间件文件的情况下解决这个问题很棘手。如果 $except 属性真的不适合你,你总是可以覆盖 VerifyCsrfToken::handle() 方法 as per this post并添加您喜欢的任何路线检查:

public function handle($request, Closure $next)
{
if ( ! $request->is('api/*'))
{
return parent::handle($request, $next);
}

return $next($request);
}

如果您只是创建一个无状态且不需要 CSRF 保护的 API,您可以在 VerifyCsrfToken 中间件的用法中注释掉 Kernel 完全(可能还有一些其他 session 中间件),尽管我建议使用某种身份验证/验证来允许您的访问者访问 API 端点。

关于php - Laravel Dingo API 和 Middleware\\VerifyCsrfToken.php 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48118899/

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