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']);
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');
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í.
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.
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