Implements AccessCheckInterface::access().
Overrides AccessCheckInterface::access
public function access(Route $route, Request $request) {
  $method = $request
    ->getMethod();
  $cookie = $request->cookies
    ->get(session_name(), FALSE);
  // This check only applies if
  // 1. this is a write operation
  // 2. the user was successfully authenticated and
  // 3. the request comes with a session cookie.
  if (!in_array($method, array(
    'GET',
    'HEAD',
    'OPTIONS',
    'TRACE',
  )) && user_is_logged_in() && $cookie) {
    $csrf_token = $request->headers
      ->get('X-CSRF-Token');
    if (!drupal_valid_token($csrf_token, 'rest')) {
      return FALSE;
    }
  }
  // As we do not perform any authorization here we always return NULL to
  // indicate that other access checkers should decide if the request is
  // legit.
  return NULL;
}