我尝试将来自另一个localhost服务器(http://localhost:8080/order/placeorder)的请求排除到另一个localhost服务器(http://localhost:8000)
我不想通过删除禁用所有csrf保护
\App\Http\Middleware\VerifyCsrfToken::class
Illuminate\Foundation\Http\Kernel.php
我试图修改app / Http / Middleware / VerifyCsrfToken.php
protected $except = [
'http://localhost:8080/*',
'http://localhost:8080',
'/order/placeorder/*',
'http://localhost:8080/order/placeorder'
];
我也尝试过这种方式
private $openRoutes = [
'http://localhost:8080/*',
'http://localhost:8080',
'/order/placeorder/*',
'http://localhost:8080/order/placeorder'
];
public function handle($request, Closure $next)
{
//add this condition
foreach($this->openRoutes as $route) {
if ($request->is($route)) {
return $next($request);
}
}
return parent::handle($request, $next);
}
但我仍然有这个错误
VerifyCsrfToken.php中的TokenMismatchException
任何人都可以建议我应该做什么以及我做错了什么?
答案 0 :(得分:1)
例外是您自己的应用程序中被排除的路由,而不是请求它的服务器的URL。在正常情况下,您绝不会将localhost
,http
或任何域放在这些例外中。如果您希望接受外部服务器的请求,我将为其正在访问的路由禁用CSRF保护(因为您需要跨站点请求,这是CSRF阻止的)。
例如,如果您希望任何外部服务器能够向/order/placeorder
发送POST请求,则只需将该路由添加到排除项中即可。您还需要添加您希望它能够访问的任何其他路由。如果有很多,还有其他更易于管理的方法来使用中间件。
要对发出请求的服务器进行身份验证,它应发送令牌以验证自身。您可以为此目的创建一个静态令牌(如API密钥),或者可能使用某种带有访问/刷新令牌的OAuth实现 - Laravel为此提供了一个易于使用的包。