Ajax en Codeigniter

Lo que hago normalmente es centralizar todas las llamadas de Ajax sobre el mismo controlador y así evitar posibles coladeros de seguridad. Lo primero es, si tenemos activada la seguridad de los formularios mediante CSRF, es modificar el fichero application/config/config.php para dos posibles opciones:
Deshabilitar la validación de CSRF para las llamadas a la ruta Ajax:

$config['csrf_protection'] = (strpos($_SERVER["REQUEST_URI"], 'ajax/') !== FALSE)?FALSE:TRUE;

O hacer que no se renueve la cookie de validación en cada llamada ya que si se hacen varias llamadas de Ajax, si se renueva la cookie en cada llamada, solo daría como válida la primera llamada:

$config['csrf_regenerate'] = FALSE;

El siguiente paso es solo necesario si hemos decidido la no renovación de la cookie, y consiste en hacer que en todas las llamadas que hagamos de Ajax, se añada el campo de validación de CSRF:

$(function(){
  $.ajaxSetup({
    data: {'<?php echo $this->security->get_csrf_token_name(); ?>' : '<?php echo $this->security->get_csrf_hash(); ?>'}
  });
});

Y ya podemos pasar al controlador:

if ( ! defined('BASEPATH')) exit('No esta permitido el acceso');

class Ajax extends CI_Controller {

	public function __construct(){
        parent::__construct();
		// si no es una petición ajax, descartamos directamente la solicitud
        if(!$this->input->is_ajax_request()) exit;
		
		// recuperamos todos los parametros que lleguen por POST
        $this->datos = $this->input->post(NULL, TRUE);
    }

    public function login(){
        $errores = array();
	// campos que serán obligatorios en la petición
        $required = array('email', 'password');
        if(count(array_intersect_key(array_flip($required), $this->datos)) === count($required)) {
		
	    //validaciones que tengamos que hacer de los campos
            if(strlen(trim($this->datos['email'])) == 0) $errores['email'] = 'Debe indicar el email';
            elseif (!filter_var($this->datos['email'], FILTER_VALIDATE_EMAIL))  $errores['email'] = 'Formato de email no válido';
            if(strlen(trim($this->datos['password'])) == 0) $errores['password'] = 'Debe indicar la contraseña';
			
			................
			
	    // devolvemos el resultado
            if(count($errores) == 0){
                echo json_encode(array('resultado'=>true));
            }else{
                echo json_encode(array('resultado'=>false, 'campos'=>$errores));
            }
        }
    }
	
}	

Deshabilitar cache de Twig en Drupal 8

Mientras se desarrolla un tema de Drupal 8, es un fastidio estar borrando la cache cada vez que cambias una plantilla por lo que lo mejor es deshabilitar la cache, lógicamente solo durante el desarrollo. Para ello hay que seguir los siguientes pasos:

1. Copiar el fichero sites/example.settings.local.php como sites/default/settings.local.php

cp sites/example.settings.local.php sites/default/settings.local.php

2. En el fichero sites/default/setting.php descomentar las líneas

if (file_exists(__DIR__ . '/settings.local.php')) {
include __DIR__ . '/settings.local.php';
}

3. En el fichero sites/default/settings.local.php descomentar las líneas

$settings['cache']['bins']['render'] = 'cache.backend.null';

$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';

4. En el fichero sites/development.services.yml añadir las siguientes líneas (con esto además habilitamos el modo depuración por lo que al ver el código fuente del html podremos ver las plantillas que va cargando):

parameters:
twig.config:
debug : true
auto_reload: true
cache: false

5. Por ultimo cargar la página http://TU_URL/core/rebuild.php para que los cambios surjan efecto

Lógicamente con esto la ejecución de las páginas es un poco más lenta pero por lo menos no tienes que estar borrando la cache todo el rato. Finalmente para volver a habilitar la cache bastará con eliminar el fichero sites/default/settings.local.php

Privacidad en Windows 10

Modo paranoico activado…

Enlace muy interesante para desactivar todas las opciones que vienen en Windows 10 para mandar información de lo que hacemos con nuestro ordenador:

https://fix10.isleaked.com