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

10 réponses


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

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....

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

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 !

:( 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 !'));
        }

}

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');
}

?>

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

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 
// 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

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 :(