Salut à tous, est ce possible d'utiliser le component Auth sans êtres obligé de passé par la table users? parceque moi j'ai utilisé une autre table mais en respectant les consignes du tutos suivant :http://book.cakephp.org/2.0/fr/tutorials-and-examples/blog-auth-example/auth.html
mais losque je lance ma page d'identification j'ai une erreur cake qui me demande de créer le controller usersController la je suis perdu
Bonjour.
En plus de loginRedirect et logoutRedirect, ajoutes :
'loginAction' => array('controller' => 'comptes', 'action' => 'tonActionDeLogin')
salut à tous, je galère depuis avec le module Auth de cake voici, j'ai une table compte, qui est belongto a la table utilisateur cette table comptiens plusieurs champ parmis les quels, le champ motdepass_compte et pseudo_compte. moi j'aimerai utiliser cette table pour gérer la connexion des utilisateurs alors voici ce que j'ai dans mon controller ComptesController:```
public function beforeFilter()
{
parent::beforeFilter();
$this->Auth->allow('index','login');
}
public function login()
{
$this->layout = 'connexion';
if($this->request->is('post'))
{
if($this->Auth->login())
{
return $this->redirect($this->Auth->redirectUrl());
}
else
{
$this->Session->setFlash('Nom d\'Utilisateur ou mot de passe invalide, réessayer','default', array('class'=>'alert alert-success'));
}
}
}
public function logout()
{
return $this->redirect($this->Auth->logout());
}
et dans mon Appcontroller ceci:
class AppController extends Controller {
public $helpers = array('Html','Form','Session');
public $components = array(
'Session',
'Auth' =>array(
'authentificate' => array(
'Form' => array(
'userModel' => 'Compte',
'fields' => array(
'pseudo_compte' => 'pseudo_compte', // 'username' par défaut
'motdepass_compte' => 'motdepass_compte' // 'password' par défaut
),
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
))
),
'loginAction' => array('controller' => 'comptes', 'action' => 'login'),
'loginRedirect' => array('controller' => 'Membres','action' => 'index'),
'logoutRedirect' => array('controller' => 'pages','action' => 'display','home')
)
);
public function beforeFilter()
{
$this->Auth->allow('index','view','condition_inscription');
}
}
et enfin dans mon model Compte j'ai ceci:```
<?php
App::uses('AppModel', 'Model');
App::uses('SimplePasswordHasher','Controller/Component/Auth');
App::uses('AuthComponent','Controller/Component');
class Compte extends AppModel
{
public $belongsTo = 'Utilisateur';
public $name ='Compte';
public $validate= array(
'motdepass_compte' => array(
'rule1'=>array('rule'=>'alphaNumeric','message'=>'Uniquement des lettres et des chiffres','last'=>false),
'rule2'=>array('rule'=>array('minLength',5),
'message'=>'Votre mot de pass doit contenir plus de 8 caractères'),
'required' => array('rule' => array('notEmpty'),'message' => 'Un pseudo est requis')),
'pseudo_compte' => array(
'rule1'=>array('rule'=>'isUnique','message'=>'Ce pseudo existe déja','last'=>false),
'rule2'=>array('rule'=>array('minLength',5),
'message'=>'Votre Pseudo doit contenir plus de 8 caractères'),
'required' => array('rule' => array('notEmpty'),'message'=>'Un pseudo est requis')));
public function beforeSave($options = array())
{
if(!empty($this->data[$this->alias]['motdepass_compte']))
{
$passwordHasher = new SimplePasswordHasher(array('hashType'=>'sha256'));
$this->data[$this->alias]['motdepass_compte'] = $passwordHasher->hash($this->data[$this->alias]['motdepass_compte']);
}
return true;
}
}
?>
enfin dans la vue ceci login:
<?php echo $this->set('title_for_layout','Se connecter | Boileau'); ?>
<?php echo $this->Session->flash('auth'); ?>
<div class="row">
<div class="col-lg-12">
<div class="col-lg-6">
<header class="page-header">
<h3 align="center"> Connectez-vous à votre compte Boileau.</h3>
</header>
<br>
<div class="content-formulaire">
<?php echo $this->Html->image('user.png', array('alt'=>'compte', 'class'=>'img-circle')); ?><br>
<?php echo $this->Form->create('Compte', array('url' => array('controller' => 'Comptes','action'=>'login'),'class'=>'form-inline')); ?>
<div class="form-connexion">
<div class="row">
<div class="col-md-12 col-lg-12 line-input">
<?php echo $this->Form->input('pseudo_compte', array('label'=>'','class'=>'form-control','placeholder'=>'Pseudo','required'=>true));?>
</div>
<div class="col-md-12 col-lg-12 line-input">
<?php
echo $this->Form->input('motdepass_compte', array('label'=>'','type'=>'password','class'=>'form-control','placeholder'=>'Mot de passe','required'=>true));
?>
</div>
<div class="col-md-12 col-lg-12 line-input">
<?php
echo $this->Form->button('Connexion', array('type'=>'submit','class'=>'btn btn-primary','id' => 'submit-connexion'));
echo $this->Form->end();
?>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<?php echo $this->Html->image('afiiche_connexion.png', array('alt'=>'compte', 'class'=>'img-arrow')); ?><br>
</div>
</div>
</div>
mon souci est que lorsque j'essai de me connecter les données sont bien envoyer (je le verifient a travers firebug), mais rien ne ce passe meme pas un message d'erreur lorsque l'autification echou j'aimerai savoir si avec une table contenent plusieurs champs cake ne fonctionne pas ou je ne sais pas ce qui ce passe pardon quelqu'un aune idée?
op j'ai trouver la solution, je m'était fait avoir par authenticate, j'avais mis authentificate
Oui c'est possible, une petite recherche dans la doc sur le composant "Auth" : http://book.cakephp.org/2.0/fr/core-libraries/components/authentication.html#configuration-des-gestionnaires-d-authentification
Merci pour ton aide.mais j'ai encor un souci losque je charge mon component ainsi:```
public $components = array(
'Session', 'Auth' =>array(
'authentificate' => array(
'Form' => array(
'userModel' => 'Compte',
'fields' => array(
'username' => 'email', // 'username' par défaut
'password' => 'motdepass_compte' // 'password' par défaut
),
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
))
),
'loginRedirect' => array('controller' => 'Membres','action' => 'index'),
'logoutRedirect' => array('controller' => 'Utilisateurs','action' => 'index')
)
);
et que j'ésais d'accesdé à mes liens on me renvoi unepage me demandant de créer le controller usersController la je ne comprends plus, cela veut dire car je pensai après avoir mis la condition 'userModel' =>'Compte', le tout devais pointé vers ma table Compte
salut, pardon j'ai encor un souci. en effet voici ce que j'ai dans mon controller Comptes :
public function login()
{
$this->layout = 'connexion';
if($this->request->is('post'))
{
if($this->Auth->login())
{
return $this->redirect($this->Auth->redirectUrl());
}
else
{
$this->Session->setFlash('Nom d\'Utilisateur ou mot de passe invalide, réessayer','default', array('class'=>'alert alert-success'));
}
}
}
eyant déclaré mon component ainsi:
public $components = array(
'Session', 'Auth' =>array(
'authentificate' => array(
'Form' => array(
'userModel' => 'Compte',
'fields' => array(
'username' => 'pseudo_compte', // 'username' par défaut
'password' => 'motdepass_compte' // 'password' par défaut
),
'passwordHasher' => array(
'className' => 'Simple',
'hashType' => 'sha256'
))
),
'loginRedirect' => array('controller' => 'Membres','action' => 'index'),
'loginAction' => array('controller' => 'comptes', 'action' => 'login'),
'logoutRedirect' => array('controller' => 'Utilisateurs','action' => 'index')
)
);
et dans ma vue j'ai ceci:
<?php echo $this->set('title_for_layout','Se connecter | Boileau'); ?>
<?php echo $this->Session->flash('auth'); ?>
<div class="row">
<div class="col-lg-12">
<div class="col-lg-8">
<header class="page-header">
<h3 align="center"> Connectez-vous à votre compte Boileau.</h3>
</header>
<br>
<div class="content-formulaire">
<?php echo $this->Html->image('user.png', array('alt'=>'compte', 'class'=>'img-circle')); ?><br>
<?php echo $this->Form->create('Comptes', array('controlleur'=>'Comptes','action'=>'login','class'=>'form-inline')); ?>
<div class="form-connexion">
<div class="row">
<div class="col-md-12 col-lg-12 line-input">
<?php echo $this->Form->input('pseudo_compte', array('label'=>'','class'=>'form-control','placeholder'=>'Adresse e-mail','required'=>true));?>
</div>
<div class="col-md-12 col-lg-12 line-input">
<?php
echo $this->Form->input('motdepass_compte', array('label'=>'','type'=>'password','class'=>'form-control','placeholder'=>'Mot de passe','required'=>true));
?>
</div>
<div class="col-md-12 col-lg-12 line-input">
<?php
echo $this->Form->button('Connexion', array('type'=>'submit','class'=>'btn btn-primary','id' => 'submit-connexion'));
echo $this->Form->end();
?>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<header class="page-header">
<h3> Connectez-vous.</h3>
</header>
</div>
</div>
</div>
lorsque je saisi les identifiants enregistrés dans ma table compte et que je valide sur connexion les données sont envoyé mais rien ne se passe même pas un message d'erreur pour me dire si les données sont exactes ou pas, j'aimerai savoir si j'ai oublié quelque détails
C'est tout à fait normal.
Dans le composant Auth tu définies les champs suivants qui permettent l'authentification :
Et dans ton formulaire, tu as les camps suivants :
Comment veux-tu qu'il authentifie un utilisateur, si les champs du formulaire qui lui sont envoyé pour l'authentification, ne sont pas les même que ceux qui sont configurés dans le composant ?
Oh escuse. je viens de modifier le champ email par le pseudo_compte, mais rien a signalé pas de réaction de la page les données sont envoyées mais pas de réponse ni redirection
Dans la méthode create du Helper Form, il te faut mettre Compte, c'est à dire, le nom du modèle et non le nom du controller.
Si tu me réponds que c'est une erreur de frappe dans le code que tu nous montre qui n'existe pas dans le code de ton application, fait un minimum attention à ce que tu nous fourni, car nous ne pouvons pas t'aider correctement si tu nous donnes un code faussé.
c'est une erreur de frappe , je viens de mettre Compte dans la methode create de mon Helper Form. Toutjours rien
Dans la méthode create, il te faut mettre controller et non controlleur.
D'ailleurs, le mieux, c'est de mettre comme ceci :
$this->Form->create('Compte', array('url' => array('controller' => 'comptes', 'action' => 'login'), 'class' => 'form-inline'));
Il est préférable de séparer l'url des autres paramètres, dans la méthode create.
merci c'est fait, mais j'ai toujours le même problème ce message s'affiche :
You are not authorized to access that location.