Cómo configurar el “remember me” en Silex

Hoy he implementado la funcionalidad de remember me en una aplicación Silex haciendo uso de los proveedores SecurityServiceProvider junto al RememberMeServiceProvider.

Al registrar el RememberMeServiceProvider me daba la siguiente excepción:

InvalidArgumentException: Identifier “security.remember_me.service.{key del firewall}” is not defined.

El problema residía en que registraba el RememberMeServiceProvider antes del SecurityServiceProvider, y eso era lo que lanzaba esa excepción.

Por lo tanto, para que funcione sin problemas deberíamos tener una configuración como la siguiente, respetando como he dicho el orden a la hora de registrar los proveedores de servicios:


$app->register(new Silex\Provider\SessionServiceProvider());


$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls'    => array(
        'site'  => array(
               
               'remember_me'   => array(),
               'pattern'       => '^/',
               'anonymous'     => true,
               'form'          => array(
                          'login_path' => 'login',
                          'check_path' => 'login_check'
                ),
                'users' => $app->share(function () use ($app) {
                    return new \Lib\UserProvider($app);
                }),
                'logout' => array('logout_path' => 'logout'),
         ),
    ),
    'security.access_rules' => array(
         array('^/login', 'IS_AUTHENTICATED_ANONYMOUSLY')
    )
));

$app->register(new \Silex\Provider\RememberMeServiceProvider());

Symfony2 Security UsernamePasswordToken::serialize() must return a string or NULL

Today I got the following exception in a web application that uses Doctrine2 Entities and the Symfony Security Component with Silex framework (this can also appear in Symfony2 framework).

Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken::serialize() must return a string or NULL

ErrorException: Notice: serialize(): "id" returned as member variable from __sleep() but does not exist in /../vendor/symfony/security/Symfony/Component/Security/Core/Authentication/Token/AbstractToken.php line 149

The error appears when you have a Doctrine Entity implementing the UserInterface with a relation mapped in it.

The solution is as simple as implement the __sleep() magic method in that entity in this way.


public function __sleep(){
   return array('id', 'username', 'email');
}

This sets the id, email and username as the desired attributes to serialize ignoring the mappings and other properties in the Entity.

Izenpe en Windows8, Windows7 y Windows Vista

A continuación describo los pasos para poder funcionar con la tarjeta Izenpe en equipos con sistemas operativos Microsoft Windows actuales.

  1. Descarga software para Windows de la web de Izenpe.
  2. Una vez descargado:
    1. Hacer botón derecho en el instalador e ir a propiedades.
    2. En la pestaña compatibilidad, activar la opción: “ejecutar este programa en modo de compatibilidad para” eligiendo Windows XP Service Pack 3, marcar la casilla “ejecutar como administrador” y después Aplicar y Aceptar.
    3. Ejecutar el instalador.
  3. Conectar el lector de tarjetas en el puerto USB e insertar la tarjeta Izenpe.
  4. Abrir el sitio web de BizkaiBai en Internet Explorer, da igual la versión, y al aceptar, nos saldrá la ventanita para elegir el certificado y tras seleccionarlo, nos pedirá el pin como de costumbre.

Fuentes decentes para netbeans en linux

Acabo de instalarme la última versión de netbeans en OpenSuse y la interfaz no mostraba las fuentes correctamente.

Esto es debido a que por defecto no está usando el runtime java de sun, por lo que instalando y configurando el jre oficial se soluciona el problema.

Para ello:

  • Nos bajamos la última versión del jdk de Java de la web oficial de sun.
  • En el terminal hacéis un “zypper in {nombre del paquete rpm que os bajéis de la web de sun}”
  • Abrir el archivo netbeans-7.1/etc/netbeans.conf y establecer la ruta del jre en  /usr/java/latest/jre
  • Ahora netbeans mostrará correctamente las fuentes de su interfaz.

Wifi en Amilo M7440 con Ubuntu10.10

Ayer se me fastidiaron el adaptador de corriente de mi portátil HP y el disco duro de mi Mac Book Pro, lo que me ha obligado a resucitar mi primer equipo portátil: un Fujitsu Siemens Amilo M7440.

Aunque era un buen cacharro en el año en que lo compré, Windows 7 se le queda algo grande y además tiene un problema muy grave de diseño:  la tarjeta wifi se activa con un botón controlado por software mediante un driver sólo disponible de forma oficial para XP. Encima dicho driver requiere privilegios de Administrador y no funciona con las opciones de compatibilidad de Windows Vista y 7.

Por suerte, existe un invento creado para Linux por unos desarrolladores españoles que servía muy bien en versiones anteriores a la 10 de Ubuntu, pero para que funcione en versiones actuales hay que hacer unos retoques en el código fuente.

El archivo que hay que modificar es el fsam7440.c, lo cambios son los siguientes:


//línea 40: cambiar  #include <linux/autoconf.h> por

#include <generated/autoconf.h>

//línea 168, cambiar remove_proc_entry(DRV_NAME, &proc_root); por

remove_proc_entry(DRV_NAME, NULL);

//línea 179, cambiar dir_base = create_proc_entry(DRV_NAME, S_IFDIR, &proc_root); por

dir_base = create_proc_entry(DRV_NAME, S_IFDIR, NULL);

Una vez hemos estos cambios, se compila con un make y make install.

Para encender el “botón” del wifi basta ahora con llamar a este comando


sudo modprobe fsam7440