Остановка проверки CSRF на поддомены

#laravel #laravel-5.3

#laravel #laravel-5.3

Вопрос:

Для нашего Laravel 5.3 API я хочу устранить необходимость в токенах CSRF, поскольку все обрабатывается с помощью OAuth2 и JWT.

В настоящее время API работает на поддомене: api.example.com

Я пробовал это, но он по-прежнему запрашивает токены CSRF:

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

Я также хотел бы иметь возможность отключить защиту CSRF, когда я выполняю случайные тесты маршрута в основном приложении, которое включено app.example.dev , но добавление 'app.*' $except также не работает.

Возможно ли это сделать?

Ответ №1:

Вы можете перезаписать shouldPassThrough метод в BaseVerifier классе, где-в нем будет поддерживаться поддомен, $except например api.yourdomain.com

 /**
 * Determine if the request has a URI that should pass through CSRF verification.
 *
 * @param  IlluminateHttpRequest  $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;
}
  

Комментарии:

1. Разве return false часть не должна находиться вне цикла foreach?