Bonjour,
J'ai un soucis avec ma connexion.
Le mot de passe entré correspond bien avec celui de la base de données mais il ne se connecte pas.
Voici mon AppController :
class AppController extends Controller {
public $helpers = array('Session');
public $components = array('Session', 'Cookie',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'scope' => array('User.active' => 1)
)
)
)
);
function beforeFilter(){
$this->Auth->loginAction = array('controller'=> 'users', 'action' => 'login');
if(!isset($this->request->params'prefix'])) {
$this->Auth->allow();
}
}
}
UsersController et la fonction login() :
public function login() {
if ($this->request->is('post')) {
if($this->Auth->login()) {
$this->Session->setFlash("Vous êtes à présent connecté au site.", "flash");
$this->redirect('/');
}
else {
$this->Session->setFlash("Vos identifiants sont incorrects.", "flash", array('type' => 'error'));
}
}
}
Mon model User :
Class User extends Model {
public $validate = array(
'username' => array(
'usernameRule-1' => array(
'rule' => 'isUnique',
'allowEmpty' => false,
'required' => true,
'message' => '* Ce nom d\'utilisateur est déja pris'
),
'usernameRule-2' => array(
'rule' => '/^[A-Z][a-z]{1,9}_[A-Z][a-z]{1,9}$/s',
'message' => '* Le nom de votre personne doit être au format « Prénom_Nom »'
)
),
'password' => array(
'passwordRule-1' => array(
'rule' => array('minLength', 8),
'allowEmpty' => false,
'required' => true,
'message' => '* Votre mot de passe doit contenir au moins 8 caractères'
)
),
'email' => array(
'rule' => array('email', true),
'allowEmpty' => false,
'required' => true,
'message' => '* Votre adresse email n\'est pas valide'
),
'aspiration' => array(
'rule' => 'notEmpty',
'required' => true,
'allowEmpty' => false
)
);
public function beforeFilter() {
Security::setHash('md5');
$this->Auth->allow('login','add');
}
function beforeSave($options = array()){
if(!empty($this->data'User']'password'])){
$this->data'User']'password'] = md5($this->data'User']'password']);
}
return true;
}
}
J'ai une autre application, de la même version (2.4) avec la même fonction login...etc et la connexion fonctionne...
Et j'ai trouvé aucune différence pouvant empêcher la connexion de fonctionner.
En espérant obtenir de l'aide.
Amicalement.
Oui le problème est résolu, comment, je n'en sais rien. J'ai re téléchargé la dernière version de CakePHP et suivis leurs tutoriel sur l'authentification et cela fonctionne mais je ne vois ce qui diffère de ce que j'avais fais...Mystère.
Merci tout de même de ton aide.
Il me semble que le mot de passe n'est pas crypté par simple md5. Essaies ceci dans model/User.php
public function beforeSave($options = array()) {
if (isset($this->data$this->alias]'password'])) {
$this->data$this->alias]'password'] = AuthComponent::password($this->data$this->alias]'password']);
}
return true;
}
Non ça ne change rien, toujours le même soucis. Je ne vois pas du tout l'origine du soucis.
J'ai eu ce soucis avec la 2.4 jusqu'à ce que je spécifie l'encodage directement dans la déclaration du $component
public $components = array(
'Session',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'scope' => array('User.active' => 1),
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
)
)
)
)
);
puis que j'ajoute ceci au model User :
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
class User extends AppModel{
public function beforeSave($options = array()) {
if (isset($this->data'User']'password'])) {
$passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha256'));
$this->data'User']'password'] = $passwordHasher->hash($this->data'User']'password']);
}
return true;
}
J'espère que cela t'aidera. Dans un premier temps j'avais également désactivé l'encodage des mots de passe pour vérifier que l'enregistrement se passait correctement.
Bon courage
Non ça ne fonctionne pas.
Il me met toujours que le mot de passe est incorrect dans tous les cas.
Model User :
<?php
Class User extends Model {
public $useTable = "player_account";
public $validate = array(
'username' => array(
'usernameRule-1' => array(
'rule' => 'isUnique',
'allowEmpty' => false,
'required' => true,
'message' => '* Ce nom d\'utilisateur est déja pris'
),
'usernameRule-2' => array(
'rule' => '/^[A-Z][a-z]{1,9}_[A-Z][a-z]{1,9}$/s',
'message' => '* Le nom de votre personne doit être au format « Prénom_Nom »'
)
),
'password' => array(
'passwordRule-1' => array(
'rule' => array('minLength', 8),
'allowEmpty' => false,
'required' => true,
'message' => '* Votre mot de passe doit contenir au moins 8 caractères'
)
),
'email' => array(
'rule' => array('email', true),
'allowEmpty' => false,
'required' => true,
'message' => '* Votre adresse email n\'est pas valide'
)
);
public function beforeSave($options = array()) {
App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
if (isset($this->data'User']'password'])) {
$passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha256'));
$this->data'User']'password'] = $passwordHasher->hash($this->data'User']'password']);
}
return true;
}
}
?>
AppController :
<?php
class AppController extends Controller {
public $helpers = array('Session', 'Html');
public $components = array(
'Session',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'scope' => array('User.active' => 1),
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
)
)
)
)
);
function beforeFilter() {
$this->Auth->loginAction = array('controller'=> 'users', 'action' => 'login');
if(!isset($this->request->params'prefix'])) {
$this->Auth->allow();
}
}
}
As-tu esssayé de faire d'abord un $this->User->validate() puis en cas de réussite par la suite un $this->User->save() pour savoir si le problème de la validation ne vient pas de l'encodage du mot de passe.
il faut peut-être aussi préciser le nom de ta table puisque différente de Users dans la déclaration du composant
public $components = array(
'Session',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'scope' => array('User.active' => 1),
'userModel' => 'player_account',
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
)
)
)
)
);'
Enfin, question bête mais l'utilisateur que tu essaie de connecter a-t-il bien le champ active = 1.
Bon courage