所以我正在使用一个 API,它在处理后对我用 Laravel 5 编写的应用程序进行回调,该 API 要求回调是一个 post 方法,这正是我的路由文件所说的。
路线:
Route::group(['prefix' => 'donate'], function () {
Route::group(['prefix' => 'paygateway'], function () {
Route::post('success', 'Donate\PaygatewayController@succesfull');
});
});
我还在 except 数组的 VerifyCsrfToken 文件中添加了这个
protected $except = [
'donate/paygateway/success',
];
}
不知何故,当 API 向它发送消息时,这仍然给我 TokenMismatchException,我似乎无法弄清楚如何/为什么。我尝试了完整的 URL,带有尾部斜杠,没有控制器中的中间件,但没有成功。
我该如何解决这个问题?
我也有这个问题。当我在 localhost:8000 上运行 laravel 应用程序时,一切都很好。但是当我只在本地主机(端口 80)上运行应用程序时,每当我向 api 发送发布请求时,我都会收到 csrf 不匹配错误。我发现将域名从 localhost 更改为其他名称会使错误停止。原来这是由 /config/sanctum.php 文件中的
stateful
属性控制的。因此,如果您尝试了标准补救措施但它们不起作用,请编辑该文件并从有状态域中删除 localhost。或者设置 SANCTUM_STATEFUL_DOMAINS="anything_other_than_localhost" 环境变量。然后清除缓存:php artisan config:clear
再试一次。
打开 Laravel 项目中的 app/Http/Middleware/VerifyCsrfToken.php 文件。 将要排除的路由添加到 $except 属性中:
protected $except = [
'your-route-here',
];
中间件可能不适用于您要排除的路由。检查您的 app/Http/Kernel.php 文件以确保 VerifyCsrfToken 中间件应用于正确的路由。
尝试通过运行 php artisan 缓存来清除应用程序的缓存:clear
/// 配置/cors.php
['api/*', 'sanctum/csrf-cookie'], 'allowed_methods' => ['*'], 'allowed_origins' => ['env(APP_DOMAIN)', '*.env(APP_DOMAIN)'], 'allowed_origins_patterns' => [], 'allowed_headers' => ['*'], 'exposed_headers' => [], 'max_age' => 0, 'supports_credentials' => 真, ];