Bonjour bonjour !
Je viens faire appel à votre savoir, après m'être tiré les cheveux pendant plusieurs heures sur google (en anglais, s'il vous plait) et quelques recherches sur les forums de Grafikart.
J'expose :
J'ai terminé de coder une première version de mon site, dernières verifications, tout fonctionne correctement en local, etc.
Une fois en ligne, je test de nouveau et là ! Oh surprise ! Une partie du site ne fonctionne pas...
Une fois connecté, j'accède très bien au site, mais dans la partie "Offers", la navigation du site est celle qui apparait quand non connecté, et les infos ne s'affichent pas (le cookie n'a l'air de subir aucune modification, et à bien l'air toujours présent).
Avant ça, j'avais un problème avec la ligne qui suit, qui m'affichait une page blanche :
$this->Auth->allowedActions = array('');
Il m'a suffit de supprimer le "s" de Action et ça "fonctionnait".
En testant avec :
debug($this->Auth);
je n'arrive pas à voir quelle information pourrait m'être utile pour avoir une piste et comprendre ce bug.
Pour info : j'ai déjà supprimé mon cache comme souvent indiqué, ... pas plus d'avancée... Mes fichiers sont tous en utf-8...
Je me permet de vous copier des parties de mon code, ce qui pourrait peut-être vous aider à comprendre et me donner des pistes, parce que là je sèche :-)
AppController.php :
class AppController extends Controller {
public $helpers = array('Text', 'Form', 'Html', 'Session');
public $components = array('Session', 'Cookie',
'Auth' => array(
'authenticate' => array(
'Form' => array(
'scope' => array('User.active' => 1)
)
)
)
);
function beforeFilter() {
$this->Auth->allow();
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->userModel = 'User';
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'home');
}
function beforeRender() {
$this->set('userFirstName', $this->Auth->user('firstname'));
$this->set('userUsername', $this->Auth->user('username'));
}
}
OffersController.php :
class OffersController extends AppController {
function beforeFilter(){
parent::beforeFilter();
$this->Auth->allowedAction = array('');
}
...]
OffersController.php (suite, fonction my()) :
function my() {
$myUserId = $this->Auth->user('id');
$conditions = array('user_id'=> $myUserId);
$d = $this->set('offers', $this->Offer->find('all', array(
'conditions' => $conditions,
'fields' => array(
'id',
'request_id',
'character_id',
'price',
'status'
),
'order' => array(
'id' => 'DESC'
)
)));
$this->loadModel('Character');
$d'characters'] = $this->Character->find('all', array(
'conditions' => array('Character.user_id'=>$myUserId),
'fields' => array(
'id',
'name',
'realm',
'region',
'user_id'
)
));
$this->set($d);
$this->loadModel('Request');
$d'requests'] = $this->Request->find('all');
$this->set($d);
$d'myUserId'] = $this->Auth->user('id');
$this->set($d);
}
Pour moi, ce dysfonctionnement me parait complément absurde :-s
Edit 22 mai 2012 à 11h44 :
Je tiens à préciser que, dans un comportement normal, si l'accès n'est pas autorisé à une page, on est redirigé sur la page de connexion. Ce qui n'est pas le cas ici...
Edit 22 mai 2012 à 13h50 :
Si je place, dans mon beforeRender de AppController.php :
debug($this->viewVars);
Sur les pages qui s'affiche correctement, identifiant est bien égal à mon identifiant une fois connecté.
Sur ma page qui pose problème, il est égal à null... (en local, pas de problème, la valeur vaut bien mon identifiant).
Edit 22 mai 2012 à 17h06 :
J'ai encore cherché, et je n'ai toujours pas trouvé de solution.
Je pense avoir identifié le problème, mais ne sais pas comment le résoudre :
<?php debug($this->Auth->user()); ?>
Est null sur la page qui pose problème...
Une idée ?
Edit 22 mai à 17h50 :
Pour vous faire une idée plus précise, vous pouvez vous rendre et vous inscrire sur http://crafffted.pjbdes.fr
Edit 22 mai 11:07 :
J'ai tenté de lancé la session manuellement, aucun changement remarqué.
J'ai aussi modifié core.php en indiquant différents types de session : aucun changement non plus...
Help??!
ça à l'air bien compliqué ^^ surtout le fait que ça marche en local et pas en distant.
Pour le <?php debug($this->Auth->user()); ?> dans une vue j'avais déjà vu ça et il suffit de faire ça je crois :
<?php debug($this->Session->read('Auth.User')); ?>
sinon je vois que tu utilise allowAction pour dire que toute les action necessite d'etre connecter c'est bien ça? ne faut-il pas précisé quelque part Auth->authorize = 'action' ou 'controller' je sais plus.
Perso j'ai déjà très souvent eu des problème avec Auth quand je faisait allow() suivit d'un deny()
ça marchais pas souvent mais essaye deny() pour dire que tu bloque toute les vue dans le beforeFilter.
Ces conditions fonctionnent très bien pour d'autres controller, c'est ca qui est étrange.
Sinon le debug est dans le controleur App et non dans la vue, donc pas de problème de ce côté là :-)
Et oui, toutes les actions nécessitent d'être connecté sauf signup et activate pour la création du compte;-)