Cette page web a une boucle de redirection !!! logout function ,

Par Laila Soufia Alaoui, il y a 11 ans


Salut tt l monde mon problemes est de direction dns mon projet , j cree un espace pour monter l'utilisateur

10 réponses

the7thlucifer, il y a 11 ans

Tu peux expliquer tout cela correctement et avec précision .. ?

kadevland, il y a 11 ans

Une Mauvaise config DNS + server web c'est toujour l'enfer.
Il va falloir que tu donnes vraiement des détails sur ce que tu veux faire, ce que tu as faits etc....

Nihad Sidki, il y a 11 ans

public function getuser(){

    $user = array(
                    'id' => $this->Auth->user('id'),
                    'username' => $this->Auth->user('username'),
                    'avatar' => $this->Auth->user('avatar')
                     );

        if($this->Auth->User()) {
            $this->redirect(array('action'=>'index'));  
            $this->set(compact($user));
                                }
}voici mon controller :

et l 'element :

<!-- Sidebar user panel -->
<?php

$user=$this->requestAction(array('controller'=>'users', 'action'=>'getuser'));

?>
<div class="user-panel">
<div class="pull-left image">
<img src="<?php //echo 'app'.'/'.'webroot'.'/'.'img'.'/'.'avatars'.'/'.$user['id'].'.'.$user['avatar'];?>" style="width:50px;height:50px;" class="img-circle" alt="User Image">
</div>
<div class="pull-left info">
<p><?php //echo $user['username']; ?></p>
<?php
// if ($user['username']) {?>

          <a href="#"><i class="fa fa-circle text-success"></i> Online</a>

            <?php
         // }else{?>

          <a href="#"><i class="fa fa-circle faild"></i> Offline</a>              

          <?php 
          ///} ?>

        </div>
        <div>
        <?php 
      echo $this->Html->link( "Logout",   array('Controller'=>'users','action'=>'logout') ); 
      ?>
        </div>
    </div>

    j v exactement fficher dns mon element le nom d'utilisateur connecter est qlq info (photo) ms n fonction pas  , lerreur est 

   """ Cette page web a une boucle de redirection

La page web à http://localhost/cakephp-2.5.7/dashboard a entrainée trop de redirections. Supprimer les cookies pour ce site ou autoriser les cookies de tierces parties peut régler le problème. Sinon, il est possible que cela provienne d'un problème de configuration du serveur, et non pas d'un problème avec votre ordinateur."""

impossible de charger la page !!! c ca prb Merci

kadevland, il y a 11 ans

toi dois avoir l'execution $this->requestAction(array('controller'=>'users', 'action'=>'getuser')); sur ta page d'arrivée.
vérifie sur quelle page tu arrives.
(network / reseau sous chrome / firebug de ffx en mode conservation )

$this->redirect(array('action'=>'index')); => redirection vers la methode index du ton controlleur.
il faudrais peu être faire
$this->redirect(url du site); pour l'envoyé à la racine du site.

if($this->Auth->User()) vérifie cette condition pour moi tu la valide su c'est un utilisateur
il manque pas le !

Nihad Sidki, il y a 11 ans

ms c q concerne la redirection dns l'action login :
public function login() {

    //if already logged-in, redirect
    if($this->Session->check('Auth.User')){
        $this->redirect(array('controller' => 'annonces', 'action' => 'index'));        
    }

    // if we get the post information, try to authenticate
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            $this->Session->setFlash(__('Bonjour, '. $this->Auth->user('username')));

            $this->redirect($this->Auth->redirectUrl());

        } else {
            $this->Session->setFlash(__(' username ou mots de passe invalid !'));
        }
    } 

    q jd faire 
Nihad Sidki, il y a 11 ans

:( c marche pas aussi voici controller :

public function login() {

    //if already logged-in, redirect
    if($this->Session->check('Auth.User')){
        $this->redirect(array('controller' => 'annonces', 'action' => 'index'));        
    }

    // if we get the post information, try to authenticate
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            $this->Session->setFlash(__('Bonjour, '. $this->Auth->user('username')));

            $this->redirect($this->Auth->redirectUrl());

        } else {
            $this->Session->setFlash(__(' username ou mots de passe invalid !'));
        }
    } 

}

public function logout() {

    $this->redirect($this->Auth->logout());
    //$this->redirect(array('action' => 'login'));

}

public function getUser(){

    if ($this->Auth->login()) {
            $user = array(
            'id' => $this->Auth->user('id'),
            'username' => $this->Auth->user('username'),
            'avatar' => $this->Auth->user('avatar')
            );
            $this->redirect($this->Auth->redirectUrl());
            return $user;

        } else {
            $this->Session->setFlash(__(' username ou mots de passe invalid !'));
        }

}
Nihad Sidki, il y a 11 ans

Voici mon element admin.ctp:

<?php

$user=$this->requestAction(array('controller' => 'users','action'=> 'getuser'));
debug($user);
if ($user) {
?>
<div class="user-panel">
<div class="pull-left image">
<img src="<?php echo 'app'.'/'.'webroot'.'/'.'img'.'/'.'avatars'.'/'.$user['id'].'.'.$user['avatar'];?>" style="width:50px;height:50px;" class="img-circle" alt="User Image">
</div>
<div class="pull-left info">
<p><?php echo $user['username']; ?></p>
<?php
if ($user['username']) {?>

            <a href="#"><i class="fa fa-circle text-success"></i> Online</a>

            <?php
            }else{?>

            <a href="#"><i class="fa fa-circle faild"></i> Offline</a>              

            <?php 
            } ?>

            </div>
            <div>
            <?php 
            echo $this->Html->link( "Logout",   array('Controller'=>'users','action'=>'logout') ); 
            ?>
            </div>
            </div>

<?php

}else{
die('vous est deconnecter');
}

?>

kadevland, il y a 11 ans

Je te propose ça comme modification de code

/** fonction pour récupere les informations sur l'USER @return array si User valide sinon false **/ public function getUser(){ if ($this->Auth->login()) { $user = array( 'id' => $this->Auth->user('id'), 'username' => $this->Auth->user('username'), 'avatar' => $this->Auth->user('avatar') ); // $this->redirect($this->Auth->redirectUrl()); return $user; } return false; } /** Vérifie si USER est valide return true en cas sinon redirige en fonction du param **/ public function checkUserAccess(){ if(!$this->Auth->login()){ $this->redirect($this->Auth->redirectUrl()); }else{ return true; } return false; }

ne pas faire le redirection dans le getuser mais plus dans un fonction de controle

comme ça tu fais appel a checkUserAccess que sur les pages que tu veux bloqué
note: Sur la page de login désactivité le bloquage pour pouvoir s'identifier

rappel :

le operateur === ou !== test l'expression mais prend en compte le type de variable

$a=1; // int $b='1'; // string $a==$b => vrai $a!=$b => faux $a===$b => faux $a!==$b => vrai //en utilisant un cast $a===(int)$b => vrai $a!==(int)$b => faux donc un array vide !== false c'est pour ça qu'on return false dans getUser quand User n'est pas valide comme ça on différencie d'un tableau vide
kadevland, il y a 11 ans
// la partie qui risque posé problème if ($this->request->is('post')) { if ($this->Auth->login()) { // il faut bien voir ce que fait $this->Auth->login()

Test ton code en enlevant tous les redirections.
Puis réintroduit 1 à 1 jusqu'à boucle infini de redirection (comme ça on c'est quel ligne est source de la boucle infinie)

PS: le langage sms c'est juste pour les sms

Nihad Sidki, il y a 11 ans

Pour moi mon objectif et de recupreer l user courent , met dns un elemnt , j trouver que il faut utiliser
charger dans AppController:
AuthComponent::user('id');

et dns l'element :

<?php if (AuthComponent::user('id')): ?>
<p class="navbar-text pull-right">
Logged in as <a href="#" class="navbar-link"><?= AuthComponent::user('username') ?></a>
</p>
<?php endif; ?>

           ms c marceh pas j ss bloquer hhhhh :(