Componente Authentication

Puede utilizar el AuthenticationComponent para acceder al resultado de la autenticación, obtener la identidad del usuario y cerrar la sesión del usuario. Cargue el componente en su AppController::initialize() como cualquier otro componente:

$this->loadComponent('Authentication.Authentication', [
    'logoutRedirect' => '/users/login'  // Default is false
]);

Una vez cargado, el AuthenticationComponent requerirá que todas las acciones tengan un usuario autenticado presente, pero no realiza otras comprobaciones de control de acceso. Puede deshabilitar esta verificación para acciones específicas usando allowUnauthenticated():

// In your controller's beforeFilter method.
$this->Authentication->allowUnauthenticated(['view']);

Accediendo al usuario autenticado

Puede obtener los datos de identidad del usuario autenticado utilizando el componente authentication:

$user = $this->Authentication->getIdentity();

También puede obtener la identidad directamente desde la instancia del request:

$user = $request->getAttribute('identity');

Comprobación del estado de inicio de sesión

Puede verificar si el proceso de autenticación fue exitoso accediendo al objeto result:

// Using Authentication component
$result = $this->Authentication->getResult();

// Using request object
$result = $request->getAttribute('authentication')->getResult();

if ($result->isValid()) {
    $user = $request->getAttribute('identity');
} else {
    $this->log($result->getStatus());
    $this->log($result->getErrors());
}

El estado devuelto por getStatus() coincidirá con una de estas constantes en el objeto Result:

  • ResultInterface::SUCCESS, when successful.

  • ResultInterface::FAILURE_IDENTITY_NOT_FOUND, when identity could not be found.

  • ResultInterface::FAILURE_CREDENTIALS_INVALID, when credentials are invalid.

  • ResultInterface::FAILURE_CREDENTIALS_MISSING, when credentials are missing in the request.

  • ResultInterface::FAILURE_OTHER, on any other kind of failure.

El array error devuelto por getErrors() contiene información adicional procedente del sistema específico contra el que se realizó el intento de autenticación. Por ejemplo, LDAP u OAuth colocarán aquí los errores específicos de su implementación para facilitar el registro y la depuración. Pero la mayoría de los autenticadores incluidos no ponen nada aquí.

Cerrar sesión en la identidad

La sesión de una identidad se cierra simplemente con:

$this->Authentication->logout();

Si ha establecido la configuración logoutRedirect, Authentication::logout() devolverá ese valor, de lo contrario devolverá false. En este caso no realizará ninguna redirección.

Alternativamente, en lugar del componente, también puede usar el servicio para cerrar sesión:

$return = $request->getAttribute('authentication')->clearIdentity($request, $response);

El resultado devuelto contendrá un array como este:

[
    'response' => object(Cake\Http\Response) { ... },
    'request' => object(Cake\Http\ServerRequest) { ... },
]

Nota

Esto devolverá un array que contiene los objetos request y response, como ambos son inmutables se obtendran nuevos objetos. Dependiendo del contexto en el que esté trabajando, tendrá que usar estas instancias a partir de ahora si desea continuar trabajando con los objetos response y request modificados.

Configurar comprobaciones de identidad automáticas

De forma predeterminada, AuthenticationComponent automáticamente forzará que una entidad esté presente durante el evento Controller.startup. Puede hacer que esta verificación se aplique durante el evento Controller.initialize en su lugar:

// In your controller's initialize() method.
$this->loadComponent('Authentication.Authentication', [
    'identityCheckEvent' => 'Controller.initialize',
]);

También puede deshabilitar las verificaciones de identidad por completo con la opción requireIdentity