Bonjour à tous et merci de votre aide.
J'ai parcouru un millier de post à ce sujet et je ne trouve pas la soluction à mon probléme.
UsersController.php
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirectUrl());
} else {
$this->Session->setFlash(__('Votre nom d\'user ou mot de passe sont incorrects.'));
}
}
}
User.php
public function beforeSave($options = array()) {
$this->data['User']['password'] = AuthComponent::password($this->data['User']['password']);
return true;
}
AppController
public $components = array(
'Acl',
'Auth' => array(
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
),
'flash' => array()
),
'Session',
'DebugKit.Toolbar'
);
debug($this->request->data);
'User' => array(
'password' => '*****',
'username' => 'test'
)
Merci à vous
Merci Lartak de ton aide, j'ai trouvé la source de mon probléme.
Alors ne faite pas comme moi lol
Lors de l'ajout d'un utilisateur, j’appelais la fonction $this->Auth->password() dans mon UsersController.
Et une fois encore dans mon beforeSave() du modéle User.
Forcement ça ne marchera pas, si je hash deux fois le code.
Bonjour.
La première chose qui ne va pas, c'est dans ton modèle, dans la fonction beforeSave.
Tu dois d'abord vérifier que la clé password est présente lors d'une sauvegarde et tu ne dois pas utiliser le composant Auth dans un modèle, si tu regardes dans l'un des tutoriels de la documentation de CakePHP, voici ce qu'ils montrent :
App::uses('AppModel', 'Model');
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class User extends AppModel {
public function beforeSave($options = array()) {
if (isset($this->data[$this->alias]['password'])) {
$passwordHasher = new SimplePasswordHasher();
$this->data[$this->alias]['password'] = $passwordHasher->hash($this->data[$this->alias]['password']);
}
return true;
}
Si à la création de l'utilisateur le mot de passe n'est pas crypté, ce n'est pas étonnant qu'il ne puisse pas se connecter.
Ce qui aurait pu nous être utile comme information, c'est à quel moment tu fais le debug
.
Ensuite, est-ce que tu utilises les ACL ?
Pour utiliser comme configuration d'autorisation :
'authorize' => array(
'Actions' => array('actionPath' => 'controllers')
/* ... */
Pour rappel :
actionPath
Utilisé par ActionsAuthorize
pour localiser le controller action ACO’s dans l’arborescence ACO.
Merci Lartak, ta réputation te précede j'ai lu toute tes soluce sur ce forum.
Oui, le codes sont hasher et c'est fonctionnel.
Le code a été repris sur le tuto des ACL sur le site CakePHP.
Histoire de partir sur les même base j'ai repris ton code beforeSave().
Oui, les ACL sont utilisés.
UsersController, j'ai soulever toutes les restrictions pour le debug.
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow();
}
Console
cake acl check regulars Users/login
regulars is allowed.
Par contre j'ai ceci en session avec DebugKit
Session > Message > auth > message : You are not authorized to access that location.
Merci à toi
Le message dit clairement que tu n'es pas autorisé à accéder à la page demandée.
À quelle page essaies tu d'accéder quand tu as le message d'erreur ?
Je suppose également que lorsque tu tentes de te connecter, tu dois avoir ton message d'erreur (Votre nom d\'user ou mot de passe sont incorrects.), et que par conséquent, tu n'es a aucun moment connecté.
public function beforeFilter() {
//Configure AuthComponent
$this->Auth->loginAction = array(
'controller' => 'users',
'action' => 'login'
);
$this->Auth->logoutRedirect = array(
'controller' => 'pages',
'action' => 'display'
);
$this->Auth->loginRedirect = array(
'controller' => 'pages',
'action' => 'display'
);
Et les ACL sont permis pour le controller Pages
C'est suffisant pour désactiver les ACL ?
Histoire d'isoler Auth et de mieux cibler le probléme.
public $components = array(
//'Acl',
'Session',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
)
)
),
'authorize' => array(
//'Actions' => array('actionPath' => 'controllers'),
'loginAction' => array('controller' => 'users', 'action' => 'login'),
'logoutRedirect' => array('controller' => 'pages', 'action' => 'display'),
'loginRedirect' => array('controller' => 'pages', 'action' => 'display'),
'unauthorizedRedirect' => array('controller' => 'pages', 'action' => 'display')
),
'flash' => array()
),
'DebugKit.Toolbar'
);
PS J'ai changer le hasthType
if (!empty($this->data[$this->alias]['password'])) {
$passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha256'));