Bonsoir,
Merci pour tous les tutos.
Par contre, sous Ovh, je n'arrive pas à utiluser la fonction Auth->Login().
En effet, j'arrive à trouver le user, mais pas à le connecter à la session.
J'utilise Cakephp 2.x
Avez-vous une idée ?
function login(){
if($this->request->is('post')){
//$d = current($this->request->data);
if($this->Auth->user($this->request->data)){
print_r($this->request->data);
$this->User->id = $this->Auth->user("id");
$this->User->saveField('lastlogin', date('Y-m-d H:i:s'));
$this->Session->setFlash("Bienvenu ".$this->Auth->User('username'),
"notif");
return $this->redirect('/');
//return $this->redirect($this->Auth->redirect);
}else{
$this->Session->setFlash("<strong>ERREUR</strong> Votre login ou votre mot de passe ne correspond pas",
"notif", array('type'=>'error'));
}
}
}
A l'inverse la sauvegarde et creation des users se passent bien.
Merci pour vos réponses.
Bonsoir,
Dans un premier temps, met ton code entre les balises code ]. Ca sera plus lisible.
J'ai un mutualisé chez OVH, et le login fonctionne parfaitement bien.
Quand tu créer les utilisateurs, le mot de passe est bien crypté ?
As tu changé tes Security.salt / Security.cipherSeed?
En effet, la prochaine fois je mettrai les balises [code]. Oui dans la base les password sont cryptés. Oui j'ai change dans le fichier de config Security.salt / Security.cipherSeed dans le fichier core.php. J'arrive aussi à faire un findbyuser, et je récupére bien tous les infos. Et je mets ensuite ce mot de passe dans le ['User']['password'] et là je tombe toujours en erreur. Ce qui est aussi bizarre, j'ai bien mes session car j'utilise setflash de session.
Je me pose des questions par rapport à mes .htaccess.
En effet, est-ce qu'ils prennent sur les variables des sessions ?
As-tu fais des modifs par rapport à ceux fournis ? (www, app et webroot)
Si tu as changé des clé de cryptage, c'est peut être normal.
Essai de faire un
echo $this->Auth->password('XXX');
Dans un controller (peu importe il me semble), afin de générer une clé de mot de passe.
Ensuite, modifie direct en base bedonné sur un utilisateur le mot de passe gui a été généré, et essai de te connecter.
Je te garantie rien, mais si tes clés de cryptage ont été modifié, faut essayer avec le "nouveau" cryptage.
Tiens moi au courant, j'espère avoir été clair ;)
PS : Édite ton premier sujet pour mettre le code entre code ] ;)
Cordialement,
PallMallShow.
Remplace dans ton code de la fonction login le
if ($this->Auth->user($this->request->data))
par
if ($this->Auth->login())
Ca devrait résoudre ton problème. Si ce n'est pas le cas, montre nous la configuration de ton composant Auth dans le AppController et le hashage du password dans le beforeSave du model User.
Merci
J'ai essayé les 2 technique, et toujours pas résolu.
Voici le code :
function login(){
if($this->request->is('post')){
$d = current($this->request->data);
//debug(Security::hash($d'password'],null,true));
debug($this->Session->read());
$d = $this->User->findByUsername($this->request->data'User']'username']);
echo $this->Auth->password($this->request->data'User']);
echo ('<br/><br/>');
echo ($d'User']'password']);
// if($this->Auth->user($this->request->data'User'])){
if ($this->Auth->login()){
echo('<br/><br/>ok');
die($this->request->data);
$this->User->id = $this->Auth->user("id");
$this->User->saveField('lastlogin', date('Y-m-d H:i:s'));
$this->Session->setFlash("Bienvenu ".$this->Auth->User('username'),
"notif");
return $this->redirect('/');
//return $this->redirect($this->Auth->redirect);
}else{
echo('<br/><br/>erreur');
$this->Session->setFlash("<strong>ERREUR</strong> Votre login ou votre mot de passe ne correspond pas",
"notif", array('type'=>'error'));
}
}
}
Au niveau de l'affichage, j'ai
/app/Controller/UsersController.php (line 130)
null
c63d0f3299d86a35dea3b94d48d894414db4724b
c63d0f3299d86a35dea3b94d48d894414db4724b
erreur
Ce qui me parait bizarre, c'est la session.
Je ne sais pas trop comment l'activer sous OVH.
Regarde ton mode de debugage dans config/core.php
Si il est à 2 passe le a 0 test et répond.
Pour ma part j'ai eu ce bug car certains hebergeur n'accepte pas le mode debugage incluant les requests....
Merci.
J'ai fais le test, et c'est la même chose.
En effet, je suis positionné a "2"
Configure::write('debug', 2);
Voila ma fonction login pour ma part
verifie également dans ton AppController les diferents composants
//redirection et verification admin
public $components = array('Paginator','RequestHandler', 'Session', 'Auth' => array(
'loginAction' => array(
'controller' => 'Users',
'action' => 'login',
'admin' => true
),
'loginRedirect' => array( 'admin'=> true,'controller' => 'pages', 'action' => 'dashboard'),
'logoutRedirect' => array('controller' => 'pages', 'action' => 'index'),
'authError' => 'Vous devez être inscrit pour accéder à cette page !',
'authenticate' => array(
'Form' => array(
'scope' => array('User.active' => 1),
'userModel' => 'User',
'fields' => array('username' => 'username')
)
)
)
);
voici ma method login
if (!empty($this->request->data)) {
if ($this->Auth->login()) {
$this->Session->write('Auth.User.online', 1);
$this->Session->setFlash("Vous êtes maintenant connecté","flash_good");
$this->Auth->redirect(array('controller'=>'pages','action'=>'index'));
}else{
$this->Session->setFlash("Identifiants incorrects","flash_bad");
$this->Auth->redirect('/');
}
}
Ne tiens pas compte des message flash ou alors creer des mess flash dans elements.
Merci mais toujours pas.
Par contre dès que je mets la login Action, je bloque le site sur une page blanche. (tout le site)
J'ai vraiment l'impression que cela provient de la session.
Oui ceci provient du composant de session à mon avis , j ai quelques minutes a tuer ce matin rajoute moi sur fb uknow creation, pour orga un teamviwer pour que je puisse te debug
Cordialement nicolas
Merci pour la piste.
Le problème, je ne peux intervenir sur mon site au boulot.
D'autre part, je t'ai perdu au niveau de ta phrase 'sur fb uknow creation, pour orga un teamviwer'.
en gros rajoute moi sur facebook nom: uknow.creation, comme sa si ce soir nous pouvons faire un teamviewer (partage d'ecran) que je puisse voir ton code en local et ainsi voir d'ou cela provient; petite question dans ton AppController tu as quoi dans ton Beforefilter?
Désolé, je n'ai pas de facebook.
Par contre je peux installer teanviwewer sans pb.
voici mon appcontroller
y'a pas mal de commentaires car j'ai essayé différentes configuration.
public $helpers = array(
'Html'
,'Text'
,'Form'
,'Session'
,'Cache'
,'Js'
//,'Media.Media'
//,'Bs3Helpers.Bs3Form' //https://github.com/Codaxis/cakephp-bootstrap3-helpers
//,'TinyMCE.TinyMCE'
);
public $components = array(
'Session'
,'Cookie'
,'Auth' => array(
'loginRedirect' => array(
'controller' => 'posts',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'Users',
'action' => 'login', 'index'
),
'authenticate' => array(
'Form' => array(
//'fields' => array('username'=>'username','password'=>'username'),
'scope' => array('User.active' =>1)
)
)
)
);
public function beforeFilter() {
//debug($this->request);
//$this->Auth->loginAction = array('controller'=>'users','action'=>'login','admin'=>false);
$this->Auth->authorize = array('Controller');
$this->Auth->allow('index', 'show');
//$this->Auth->allow();
if(!isset($this->request->params'prefix'])){
$this->Auth->allow('index', 'show', 'edit');
}
if(isset($this->request->params'prefix']) && $this->request->params'prefix'] == 'admin'){
$this->Auth->allow();
$this->layout = 'admin';
}
// AuthComponent de ne pas exiger un login pour toutes les actions
// }
//debug($this->request);
// Controller autorization is the simplest form.
$this->Auth->authorize = 'controller';
}
public function isAuthorized($user) {
/* $roles = array(
'admin' => 15,
'bureau' => 10,
'user' => 5
);
if(isset($roles$this->request->params'prefix']])){
$lvlAction = $roles$this->request->params'prefix']];
$lvlUser = $roles$user'role']];
if($lvlUser >= $lvlAction){
return true;
}else{
return false;
}
}
return false;
*/ return true;
}
Test avec mon code beforefilter dans ton appcontroller
function beforeFilter(){
$this->Auth->loginAction = array('controller'=>'users','action'=>'login','admin'=>false);
$this->Auth->authorize = ('Controller');
if(!isset($this->request->params'prefix'])){
$this->Auth->allow();
}
if(isset($this->request->params'prefix']) && $this->request->params'prefix'] == 'admin'){
$this->layout = 'admin';
}
//AUTHORISATION
$this->defineRole($this->Auth->user('role'));
//$this->isAuthorized($user);
Bonjour.
<u><strong>Sapololo</strong></u>, tu as un doublon : ligne 37 et ligne 52, le second n'est pas bon en plus.
<u><strong>uknowcreation</strong></u>, ton code ne lui changera rien, au contraire, surtout ce que tu as mis à la ligne 14, son application ne risque pas de deviner à quoi correspond defineRole.
oui exact pour les acces dsl pas vu .
Dans cette appli je n'utilise pas les acl donc gestion des roles .
J'ai beau faire vos modifs, sans résultat.
J'ai vraiment l'impression que c'est la session.
J'ai récupéré une appli en cakephp 3, avec une partie admin.
Je vais voir.
Comme cela je serai si c'est mon appli ou sous ovh la fonction avec les sessions.
Pour le moment, je n'arrive pas non plus avec Cakephp 3.
Par contre, j'ai trouvé ceci, que je vais essayer ce soir :
Configuration de valeur session.use_trans_sid
Il y a deux méthodes de propagation de l'identifiant de session : Cookies et URL.
Exemple
Pour que l'identifiant de session soit placé dans le cookie, éditez le fichier .htaccess :
SetEnv SESSION_USE_TRANS_SID 0
D'après moi, c'est probablement une initialisation comme cela, que je n'ai pas faite.
Par contre, est-ce que je dois mettre cela dans les 3 fichiers htaccess, on verra bien !
Mais j'ai vu aussi que cela peut provenir du l'encodage du fichier.
En effet, la livraison de cakephp les fichiers sont codé en AINSI.
Pour éviter le problème d'accent, j'en ai mis certains en UTF8 sans BOM, et je me suis aperçu que d'autres sont en UTF8 (tout court).
Je pense aussi les passer tous en UTF8 (tout court) et je verrai bien.
Qu'en pensez-vous ? Comment sont les votres ?
Je pense avoir progresser car maintenant j'ai
An Internal Error Has Occurred.
Error: An Internal Error Has Occurred.