PHP-Laravel5除了来自其他网站的csrf

时间:2015-12-01 15:24:19

标签: php laravel laravel-5 laravel-5.1

我尝试将来自另一个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

任何人都可以建议我应该做什么以及我做错了什么?

1 个答案:

答案 0 :(得分:1)

例外是您自己的应用程序中被排除的路由,而不是请求它的服务器的URL。在正常情况下,您绝不会将localhosthttp或任何域放在这些例外中。如果您希望接受外部服务器的请求,我将为其正在访问的路由禁用CSRF保护(因为您需要跨站点请求,这是CSRF阻止的)。

例如,如果您希望任何外部服务器能够向/order/placeorder发送POST请求,则只需将该路由添加到排除项中即可。您还需要添加您希望它能够访问的任何其他路由。如果有很多,还有其他更易于管理的方法来使用中间件。

要对发出请求的服务器进行身份验证,它应发送令牌以验证自身。您可以为此目的创建一个静态令牌(如API密钥),或者可能使用某种带有访问/刷新令牌的OAuth实现 - Laravel为此提供了一个易于使用的包。