Jose J. Fernández Programador. Desarrollador web y SEO en León

Cambiar el controlador predefinido para login en CakePHP

Jose J. Fernández

CakePHP es un buen framework para PHP (de esos que deberías utilizar). Su filosofía es convention over configuration, es decir, que si sigues las convenciones establecidas, te ahorras código. A veces puede venirnos bien saltarnos esas convenciones, aunque esto suponga configurar manualmente aspectos del framework, como puede ser sobre qué controlador se ejecuta la acción de login.

En mi caso, para un juego que estoy desarrollando, me interesaba que el login se hiciera sobre el controlador Citizens, en lugar de sobre Users, que es el comportamiento predeterminado. Para modificar este comportamiento, debemos modificar la clase AppController:

class AppController extends Controller {

	public $components = array(
		'Session',
		'Auth' => array(
			'loginAction' => array(
				'controller' => 'citizens',
				'action' => 'login'
			),
			'loginRedirect' => array(
				'controller' => 'posts',
				'action' => 'index'
			),
			'logoutRedirect' => array(
				'controller' => 'pages',
				'action' => 'display',
				'home'
			),
			'authenticate' => array(
				'Form' => array(
					'passwordHasher' => 'Blowfish',
					'userModel' => 'Citizen'
				)
			)
		)
	);

	public function beforeFilter() {
		$this->Auth->allow('register');
	}

}

He resaltado en rojo la porción de código que modifica este comportamiento de CakePHP. El resto del código es cómo tengo ahora esa clase, pero en tu caso puede ser diferente.

Ariel 2016-06-08 - 15:17

Te hago una consulta, esto sería lo mismo para Cake3? Lo has probado? Tengo este inconveniente en la version 3, pero no se como resolverlo. Slds!

Jose J. Fernández 2016-06-08 - 15:22

Hola Ariel.

No he trabajado con Cake 3 todavía, pero en la documentación acabo de comprobar que existe un ejemplo de esto mismo:

Authentication: configuring authentication handlers

Parece que es muy similar:

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Auth', [
        'loginAction' => [
            'controller' => 'Users',
            'action' => 'login',
            'plugin' => 'Users'
        ],
        'authError' => 'Did you really think you are allowed to see that?',
        'authenticate' => [
            'Form' => [
                'fields' => ['username' => 'email']
            ]
        ],
        'storage' => 'Session'
    ]);
}

También para incluir en el AppController.

No se mostrará públicamente.

Un enlace a tu blog o página web.