Bonjour,
voici mon probleme
Je fais un systeme de login, mais le composant Auth->login() me renvoie toujours false:
voici ma fonction login dans mon membreController
function login(){
if($this->request->is('post')){
if($this->Auth->login()){
$this->Session->setFlash("Bienvenue sur le site","notif");
$this->redirect('/');
}
else
{
$this->Session->setFlash("Identifiants incorrects","notif",array("type"=>"error"));
// debug(Security::hash($this->request->data'membre']'password'],null,true));
debug(md5($this->request->data'membre']'password']));
}
}
}
voici mon formulaire login.ctp
<?php echo $this->Form->create('membre',array("class"=>"page")); ?>
<div id="h1_head">
<h3 class="headerAccess"><span>Saisir votre pseudo et votre mot de passe</span></h3>
</div>
<div class="body1">
<?php echo $this->Form->input("username",array('label'=>"Pseudo <span class='obli'>(*)</span>:" )); ?>
<?php echo $this->Form->input("password",array('label'=>"Mot de passe <span class='obli'>(*)</span>: ", "type"=>"password")); ?>
</div>
<?php echo $this->Form->end("Se connecter"); ?>
et enfin mon AppController
class AppController extends Controller {
public $components = array('Session','Cookie',
'Auth'=>array(
'authenticate'=> array(
'Form'=> array(
'scope'=> array('membre.active'=>0)
)
)
)
);
//par defaut cakePHP sécurise tout le site quand on charge le component "auth"
//donc on autorise toutes les actions du site
function beforeFilter(){
$this->Auth->allow();
}
}
avec membre.active à 0
J'ai crée un utilisateur toto avec mot de passe toto sans encodage rien , juste pour tester, et j'ai toujours identifiants incorrects, j'arrive vraiment pas à trouvé d'où cela provient :(
Vous avez une idée ?
Merci d'avance
Re,
Il semblerait que ça fonctionne , si je passe à la fonction Auth les data postées..
function login(){
if($this->request->is('post')){
if($this->Auth->login(<strong>$this->request->data</strong>)){
$this->Session->setFlash("Bienvenue sur le site","notif");
$this->redirect('/');
}
else
{
$this->Session->setFlash("Identifiants incorrects","notif",array("type"=>"error"));
// debug(Security::hash($this->request->data'membre']'password'],null,true));
debug(md5($this->request->data'membre']'password']));
}
}
}
mais je sais pas si c'est une bonne pratique?
et si tu ajoutes
$this->User->id = $this->Auth->user("id");
comme ceci
function login(){
if($this->request->is('post')){
if($this->Auth->login()){
$this->User->id = $this->Auth->user("id");
$this->Session->setFlash("Bienvenue sur le site","notif");
$this->redirect('/');
}else{
$this->Session->setFlash("Identifiants incorrects","notif",array('type'=>'error'));
}
}
}
Non toujours identifiants incorrects...
alors j'avais imaginé faire une magouille du genre, récupérer les infos correspondant au pseudo/password et le passer au composant Auth.. mais je ne comprend pas pourquoi de lui même , il ne veut pas le faire
function login(){
if($this->request->is('post')){
$d=$this->request->data;
$dataMember=$this->membre->find("first",array('conditions'=>array('membre.username='=>$d'membre']'username'],'membre.password'=>md5($d'membre']'password']));
if($this->Auth->login($dataMember)){
$this->Session->setFlash("Bienvenue sur le site","notif");
$this->redirect('/');
}else{
$this->Session->setFlash("Identifiants incorrects","notif",array('type'=>'error'));
}
}
}
Il faut que tu encodes ton mot de passe dans la base de données car CakePHP les teste comme ceci. J'imagine que dès qu'il voit un champ password, il encrypte. Par ailleurs dans ton formulaire :
<?php echo $this->Form->create('membre',array("class"=>"page")); ?>
Cela devrait être ceci normalement :
<?php echo $this->Form->create('Membre',array("class"=>"page")); ?>
Car on veut communiquer avec le controller.
PS : je te conseille d'utiliser les conventions de CakePHP. Si tu utilises User et UsersController comme Model et Controller, tout se fera beaucoup plus simplement.
Le scope de ton AppController est mauvais, du coup le login ne se fait pas.
Dans ton AppController :
'scope'=> array('membre.active'=>0)
devrait être
'scope'=> array('Membre.active'=>0)
Bonjour, je dirais que j'ai à peu près le même problème.. Ça fait une semaine que je cherche et je ne trouve rien.. j'ai même mis tout au minimum, en espérant que sa marche, mais rien.. Je n'ai pas encore essayé de me logger directement en utilisant la fonction login comme ce que tu a fais Jey, pour te dépanner. Je me dit que qu'il faut trouver le problème car c'est quand meme assé important LOLLL.
Voici mes fichiers:
AppController.php
////////////////////////////////////////
// Definition des Components
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array('controller' => 'users', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home'),
'fields' => array('username' => 'email', 'password' => 'password')
)
);
////////////////////////////////////////
// Fonction Before Filter
public function beforeFilter() {
$this->Auth->allow('index', 'view');
}
UsersController.php
class UsersController extends AppController {
////////////////////////////////////////
// Fonction Before Filter
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('add', 'delete'); // *** Temp...
}
////////////////////////////////////////
// Fonction Login
public function login() {
if ($this->request->is('post')) {
if ($this->Auth->login()) {
$this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Nom d\'user ou mot de passe invalide, réessayer'));
}
}
}
////////////////////////////////////////
// Fonction Logout
public function logout() {
$this->redirect($this->Auth->logout());
}
User.php
////////////////////////////////////////
// Validation rules
public $validate = array(
'email' => array(
'email' => array(
'rule' => array('email'),
'message' => 'Un email valide est requis',
'required' => true,
),
),
'password' => array(
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Un mot de passe est requis',
'required' => true,
),
),
'role' => array(
'notempty' => array(
'rule' => array('inList', array('admin', 'membre')),
'message' => 'Merci de rentrer un rôle valide',
'required' => true,
),
),
);
////////////////////////////////////////
// Fonction Before Save
public function beforeSave() {
if (isset($this->data$this->alias]'password'])) {
$this->data$this->alias]'password'] = AuthComponent::password($this->data$this->alias]'password']);
}
return true;
}
login.ctp
<?php echo $this->Session->flash('auth'); ?>
<?php echo $this->Form->create('User');?>
<fieldset>
<legend><?php echo __('Merci de rentrer votre nom d\'user et mot de passe'); ?></legend>
<?php echo $this->Form->input('email'); ?>
<?php echo $this->Form->input('password'); ?>
</fieldset>
<?php echo $this->Form->end(__('Connexion'));?>
Si vous pouvez m'aider je serais bien content ^^, je suis sur que c'est quelque chose qui ma échappé mais j'arrive pas à trouver quoi LOLL
Merci
@Guillaume Couture :
Pour tester le login, il faut un compte avec le mot de passe hashé. Pour tester une première fois il suffit de regarder les sql_logs(si debug > 0) pourvoir le hash généré du mot de passe.
Salut merci pour ta réponse, mais j'ai réglé mon problème en changent "email" et "password" par les field par default d'Auth.. c'est à dire "username" et "password". Je ne comprend pas pourquoi je n'étais pas capable de me connecter. Pourtant j'avais mis "'fields' => array('username' => 'email', 'password' => 'password')", tk.. Et j'avais créé un compte avec une fonction add dans le contrôleur user..