5.2.6 Variables du composant Auth
Désormais, il y a plusieurs variables liées à Auth que vous pouvez utiliser. Habituellement, vous ajoutez ces configurations dans la méthode beforeFilter() de votre contrôleur. Ou bien, si vous devez appliquer ces règles dans tout le site, vous aurez envie de les ajouter au beforeFilter() du contrôleur App.
5.2.6.1 userModel
Vous ne voulez pas utiliser un modèle Utilisateur pour vous authentifier ? Pas de problème, modifiez ce comportement en configurant cette variable avec le nom du modèle que vous voulez utiliser.
<?php
$this->Auth->userModel = 'Membre';
?>
<?php$this->Auth->userModel = 'Membre';?>
5.2.6.2 fields
Pour outrepasser les champs utilisateur et mot de passe utilisés par défaut pour l'authentification.
<?php
$this->Auth->fields = array('username' => 'email', 'password' => 'motdepasse');
?>
<?php$this->Auth->fields = array('username' => 'email', 'password' => 'motdepasse');?>
5.2.6.3 userScope
Utilisez cette propriété pour ajouter des contraintes supplémentaires afin que l'authentification réussisse.
<?php
$this->Auth->userScope = array('Utilisateur.actif' => true);
?>
<?php$this->Auth->userScope = array('Utilisateur.actif' => true);?>
5.2.6.4 loginAction
Vous pouvez changer l'adresse de connexion par défaut /users/login par toute action de votre choix.
<?php
$this->Auth->loginAction = array('admin' => false, 'controller' => 'membres', 'action' => 'login');
?>
<?php$this->Auth->loginAction = array('admin' => false, 'controller' => 'membres', 'action' => 'login');?>
5.2.6.5 loginRedirect
Le Composant Auth mémorise quelle paire contrôleur/action vous essayiez d'obtenir avant que l'on vous demande de vous authentifier, en stockant cette valeur dans la Session, sous la clé Auth.redirect. Cependant, si cette valeur de session n'est pas définie (par exemple, si vous arrivez à la page d'identification depuis un lien externe), alors l'utilisateur sera redirigé à l'URL spécifiée dans loginRedirect.
Exemple :
<?php
$this->Auth->loginRedirect = array('controller' => 'membres', 'action' => 'accueil');
?>
<?php$this->Auth->loginRedirect = array('controller' => 'membres', 'action' => 'accueil');?>
5.2.6.6 logoutRedirect
Vous pouvez également spécifier où vous voulez que l'utilisateur soit redirigé après sa déconnexion, ayant pour action par défaut l'action de login.
<?php
$this->Auth->logoutRedirect = array(Configure::read('Routing.admin') => false, 'controller' => 'membres', 'action' => 'logout');
?>
<?php$this->Auth->logoutRedirect = array(Configure::read('Routing.admin') => false, 'controller' => 'membres', 'action' => 'logout');?>
5.2.6.7 loginError
Change le message d'erreur par défaut affiché lorsque quelqu'un ne s'authentifie pas correctement.
<?php
$this->Auth->loginError = "Non, vous vous êtes trompé! Ce n'est pas le bon mot de passe!";
?>
<?php$this->Auth->loginError = "Non, vous vous êtes trompé! Ce n'est pas le bon mot de passe!";?>
5.2.6.8 authError
Change le message d'erreur par défaut affiché lorsque quelqu'un essaye d'accéder à une ressource ou une action qu'il n'est pas autorisé à accéder.
<?php
$this->Auth->authError = "Désolé, vous n'avez pas les droits suffisants.";
?>
<?php$this->Auth->authError = "Désolé, vous n'avez pas les droits suffisants.";?>
5.2.6.9 autoRedirect
Le texte original de cette section a changé depuis qu'il a été traduit. Aidez-nous à corriger cette différence. Vous pouvez :
Normalement, le Composant Auth vous redirige automatiquement dès lors qu'il vous authentifie. Parfois, vous souhaitez faire d'autres vérifications avant de rediriger les utilisateurs :
<?php
function beforeFilter() {
...
$this->Auth->autoRedirect = false;
}
...
function login() {
//-- le code de cette fonction ne s'exécute que lorsque autoRedirect est défini à false (i.e. dans un beforeFilter).
if ($this->Auth->user()) {
if (!empty($this->data['Utilisateur']['se_souvenir_de_moi'])) {
$cookie = array();
$cookie['nom'] = $this->data['Utilisateur']['nom'];
$cookie['motdepasse'] = $this->data['Utilisateur']['motdepasse'];
$this->Cookie->write('Auth.Utilisateur', $cookie, true, '+2 weeks');
unset($this->data['Utilisateur']['se_souvenir_de_moi']);
}
$this->redirect($this->Auth->redirect());
}
if (empty($this->data)) {
$cookie = $this->Cookie->read('Auth.Utilisateur');
if (!is_null($cookie)) {
if ($this->Auth->login($cookie)) {
// Efface le message auth, seulement si nous l'utilisons
$this->Session->del('Message.auth');
$this->redirect($this->Auth->redirect());
}
}
}
}
?>
<?phpfunction beforeFilter() {...$this->Auth->autoRedirect = false;}...function login() {//-- le code de cette fonction ne s'exécute que lorsque autoRedirect est défini à false (i.e. dans un beforeFilter).if ($this->Auth->user()) {if (!empty($this->data['Utilisateur']['se_souvenir_de_moi'])) {$cookie = array();$cookie['nom'] = $this->data['Utilisateur']['nom'];$cookie['motdepasse'] = $this->data['Utilisateur']['motdepasse'];$this->Cookie->write('Auth.Utilisateur', $cookie, true, '+2 weeks');unset($this->data['Utilisateur']['se_souvenir_de_moi']);}$this->redirect($this->Auth->redirect());}if (empty($this->data)) {$cookie = $this->Cookie->read('Auth.Utilisateur');if (!is_null($cookie)) {if ($this->Auth->login($cookie)) {// Efface le message auth, seulement si nous l'utilisons$this->Session->del('Message.auth');$this->redirect($this->Auth->redirect());}}}}?>
Le code de la fonction login ne s'exécutera pas sauf si vous définissez $autoRedirect à false dans un beforeFilter. Le code présent dans la fonction de login ne s'exécutera qu'après un essai d'authentification. C'est le meilleur endroit pour déterminer si oui ou non une connexion réussie a été effectuée par le Composant Auth (vous aurez peut-être envie d'enregistrer la dernière date d'authentification réussie, etc.).
5.2.6.10 authorize
Le texte original de cette section a changé depuis qu'il a été traduit. Aidez-nous à corriger cette différence. Vous pouvez :
Normalement, le Composant Auth essaiera de vérifier que les critères de login que vous avez saisis sont exacts, en les comparant à ce qui a été stocké dans votre modèle utilisateur. Cependant, vous voudrez peut-être certaines fois effectuer du traitement additionnel, en déterminant vos propres critères. En assignant à cette variable l'une des nombreuses valeurs possibles, vous pouvez faire différentes choses. En voici quelques-unes, parmi les plus communes, que vous souhaiterez peut-être utiliser.
<?php
$this->Auth->authorize = 'controller';
?>
<?php$this->Auth->authorize = 'controller';?>
Lorsque authorize est défini à 'controller', vous aurez besoin d'ajouter une méthode appelée isAuthorized() à votre contrôleur. Cette méthode vous permet de faire plus de vérifications d'authentification et de retourner ensuite soit true, soit false.
<?php
function isAuthorized() {
if ($this->action == 'delete') {
if ($this->Auth->user('role') == 'admin') {
return true;
} else {
return false;
}
}
return true;
}
?>
<?phpfunction isAuthorized() {if ($this->action == 'delete') {if ($this->Auth->user('role') == 'admin') {return true;} else {return false;}}return true;}?>
Souvenez-vous que cette méthode sera inspectée, après que vous ayez déjà passé la vérification d'authentification simple du modèle utilisateur.
<?php
$this->Auth->authorize = 'model';
?>
<?php$this->Auth->authorize = 'model';?>
Vous ne souhaitez rien ajouter à votre contrôleur et peut-être utiliser les ACO's ? Vous pouvez demander au Composant Auth d'appeler une méthode, nommée isAuthorized(), dans votre modèle utilisateur, pour faire le même genre de choses :
<?php
class Utilisateur extends AppModel {
...
function isAuthorized($utilisateur, $controleur, $action) {
switch ($action) {
case 'default':
return false;
break;
case 'delete':
if ($utilisateur['Utilisateur']['role'] == 'admin') {
return true;
}
break;
}
}
}
?>
<?phpclass Utilisateur extends AppModel {...function isAuthorized($utilisateur, $controleur, $action) {switch ($action) {case 'default':return false;break;case 'delete':if ($utilisateur['Utilisateur']['role'] == 'admin') {return true;}break;}}}?>
Enfin, vous pouvez utiliser authorize avec les actions, comme montré ci-dessous :
<?php
$this->Auth->authorize = 'actions';
?>
<?php$this->Auth->authorize = 'actions';?>
En utilisant actions, Auth utilisera l'ACL et vérifiera avec AclComponent::check(). Une fonction isAuthorized n'est pas nésessaire.
<?php
$this->Auth->authorize = 'crud';
?>
<?php$this->Auth->authorize = 'crud';?>
En utilisant crud, Auth utilisera l'ACL et vérifiera avec AclComponent::check(). Les actions devraient correspondre aux CRUD (voir mapActions).
5.2.6.11 sessionKey
Nom de la clé du tableau de session où l'enregistrement de l'utilisateur actuellement authentifié est stocké.
Par défaut, vaut "Auth", donc si non spécifié, l'enregistrement est stocké dans "Auth.{nom $modeleUtilisateur}".
<?php
$this->Auth->sessionKey = 'Autorise';
?>
<?php$this->Auth->sessionKey = 'Autorise';?>
5.2.6.12 ajaxLogin
Si vous faites des requêtes Ajax ou Javascript qui nécessitent des sessions authentifiées, donnez à cette variable le nom d'un élément de vue que vous souhaiteriez rendre et retourner quand vous avez une session invalide ou expirée.
Comme dans toute partie de CakePHP, soyez certains d'avoir jeté une œil à la classe AuthComponent dans l'API, pour avoir une vision plus approfondie du composant Auth.
5.2.6.13 authenticate
Cette variable contient une référence à l'objet responsable du hashage des mots de passe, s'il est nécessaire de changer/surcharger le mécanisme de hashage des mots de passe par défaut. Voyez Changer le type de cryptage pour plus d'info.
5.2.6.14 actionPath
Si vous utilisez le contrôle d'accès basé sur les actions, ceci définit la façon dont sont déterminés les chemins vers les nœuds ACO de l'action. Si, par exemple, tous les nœuds de contrôleur sont imbriqués sous un nœud ACO nommé 'Controllers', $actionPath devrait être défini à 'Controllers/'.


























