停止CSRF检查子域

时间:2016-10-11 19:04:07

标签: laravel laravel-5.3

对于我们的Laravel 5.3 API,我想删除对CSRF令牌的需求,因为所有内容都是使用OAuth2和JWT处理的。

目前,API在子域上运行:api.example.com

我试过了,但它仍然要求CSRF令牌:

class VerifyCsrfToken extends BaseVerifier
{
    protected $except = [
        'api.*'
    ];
}

我还希望能够在app.example.dev上的主应用上进行随机路由测试时禁用CSRF保护,但同时将'app.*'添加到$except不起作用。

是否可以这样做?

1 个答案:

答案 0 :(得分:1)

您可以覆盖shouldPassThrough类中的BaseVerifier方法,其中包含$except中的子域名,例如api.yourdomain.com

/**
 * Determine if the request has a URI that should pass through CSRF verification.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return bool
 */
protected function shouldPassThrough($request)
{
    foreach ($this->except as $except) {
        if (Str::is($except, $request->url())) {
            // break out of CSRF check
            return true;
        }
    }

    return false;
}