Bonjour, Bonsoir,
je poste ce sujet étant à bout et ne trouvant pas, après des centaines de modifications et au moins 3 reprise entière, de réponse à mon problème.
Actuellement je fais un site sous CakePHP 2.5.4, et je souhaite faire mon espace de login. J'ai déja fait l'inscription, je suis le tutoriel a la lettre, mais j'ai modifié certaines choses car il ne s'agit pas d'un site lambda, c'est à dire qu'il me servira pour plusieurs choses derrière. Etant donné ces..choses derrière, je dois utiliser une base de donnée autre que celle de base.
Au lieu de la table "Users" j'utilise la table "Accounts", mais aucun soucis la dessus, il m'a suffit de mettre un :
class User extends AppModel{
public $useTable = 'accounts';
...et le reste de mon Model.
Je suis aussi dans l'obligation d'utiliser un hash en md5 pour la database, aucun soucis non plus puisque j'ai mis un
Security::setHash('md5');
Donc mon problème est le suivant, j'ai tout tenté mais en vain, lorsque je veux me connecter avec mon compte: les valeurs envoyées sont bien :
Login => MonLogin
PasswordHash => le même hash que celui de la DB.
Ainsi j'ai voulu mettre les fields des forms username et password et dire d'utiliser respectivement dans ma table "Login" et "PasswordHash".
Voici ma fonction beforeFilter()
function beforeFilter(){
Security::setHash('md5');
$this->Auth->allow();
$this->Auth->authenticate = array(
'Form' => array(
'fields' => array('Login' => 'Login', 'PasswordHash' => 'PasswordHash'),
)
);
}
Rien à faire, quand je veux me connecter, cela me retourne sans cesse que les identifiants sont incorrects.
Voici la fonction login() de mon UsersController.php
function login(){
if($this->request->is('post'))
{
if($this->Auth->login())
{
$this->Session->setFlash("Vous êtes maintenant connecté !", "notif");
$this->redirect('/');
} else {
$this->Session->setFlash("Les identifiants sont incorrects", "notif", array('type' => 'danger'));
debug(Security::hash($this->request->data'User']'PasswordHash']));
}
}
}
Et voici mon formulaire(Ne faites pas attention aux divs etc, il ne s'agit que de ma mise en page.
<?= $this->Form->create('User', array('class' => 'sky-form')); ?>
<header>Connexion</header>
<fieldset>
<section>
<label class="input">
<i class="icon-append fa fa-user"></i>
<?= $this->Form->input('Login', array('placeholder' => 'Login', 'label' => false)); ?>
<b class="tooltip tooltip-bottom-right">Votre nom de compte</b>
</label>
</section>
<section>
<label class="input">
<i class="icon-append fa fa-lock"></i>
<?= $this->Form->input('PasswordHash', array('placeholder' => 'Mot de passe', 'label' => false, 'type' => 'password')); ?>
<b class="tooltip tooltip-bottom-right">Votre mot de passe!</b>
</label>
</section>
</fieldset>
<fieldset>
<section>
<h4>Mot de passe perdu ?</h4>
<p><a style='color:#009900' href="#">Cliquez ici</a> pour réinitialiser le mot de passe.</p>
</section>
</fieldset>
<footer>
<center>
<?php $options = array(
'class' => 'btn-u',
'label' => 'Connexion'
) ?>
<?= $this->form->end($options); ?>
Voila...Si quelqu'un peut m'apporter son aide..Cela fait 2 jours que je n'arrive pas à résoudre ce problème et je commence à fatigué.
Au passage, voici un screen du debug de mon PasswordHash lors de l'envoi, decelui en DB, et de la réponse du site :
Merci d'avance !
Sujet résolu, j'ai fait au final le login moi même et en définissant le $this->Auth->login avec entre () le $user et ça marche. Merci de ton(votre) aide.
Hello,
Déjà, avant toute chose, je te déconseille très fortement le md5 pour des mdp, sa devient de moins en moins sécurisé, car il existe de plus en plus de dictionnaire, ou alors, utilise un salt avec :
http://book.cakephp.org/2.0/fr/core-utility-libraries/security.html
Si tu utilise une table accounts, pourquoi ne pas créer le model qui va avec directement ? De plus, c'est pas top top comme nom de table, Cakephp recommande comme nom de table 'users' et les colonnes 'username' et 'password' comme décris ici : http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html#creating-all-users-related-code car comme tu peut le voir, sa créer pas mal de soucis après.
Bon, sa reste toujours possible d'utiliser des noms spécifiques, mais pour ça, il faut un peut de config.
Ce code n'est pas bon :
$this->Auth->authenticate = array(
'Form' => array(
'fields' => array('Login' => 'Login', 'PasswordHash' => 'PasswordHash'),
)
);
Car, le but de 'fields', c'est d'indiquer les champs pour authentifier un user qui ne sont pas les champs par défaut de Cakephp, autrement dit tu indiques quels champs vont remplacer les 'username' et 'password' :
$this->Auth->authenticate = array(
'Form' => array(
'fields' => array('username' => 'Login', 'password' => 'PasswordHash'),
)
);
Mais comme j'ai dit, si tu peut, et même si tu doit faire 2/3 modifs d'un code existant ou d'une bdd, je te recommande vivement d'utiliser les conventions de CakePhp.
Salut,
tout d'abord merci de ta réponse,
mon problème persiste, j'ai beau avoir changer ces lignes cela ne change rien.Je ne sais pas d'ou le problème viens. Et je préfère être sous le nom "User" même si cela ne change rien.
Il me retourne toujours que mes identifiants sont faux. Y'a t-il moyen de voir la requete qui est éffectuée, une fonction en PHP qui ferai ça? Histoire que je vois ou éxactement cela bloque (Au niveau des tables / columns)
A bientot!
C'est bizarre quand même.
Pour voir les requêtes SQL, tu devrais avoir cette ligne dans app\View\Layouts\default.ctp :
https://github.com/cakephp/cakephp/blob/master/app/View/Layouts/default.ctp#L61
Bon, voila ce que ma requete me donne :
Du coup, me voila encore plus perdu, il ne sélectionne pas le mot de passe apparemment..