停止 CSRF 检查子域

Stopping CSRF checking for subdomains

对于我们的 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 也不行。

可以这样做吗?

您可以覆盖 BaseVerifier class 中的 shouldPassThrough 方法,其中它将支持 $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;
}