bonjour,
je ne vois pas ou configurer la redirection admin.
Je suis en local et je fais localhost/monapp/admin et ca me redirige sur http://monapp.com/monapp/user/login

merci d'avance

19 réponses


Lartak
Réponse acceptée

Dans le controller Users, il est plusieurs fois fait appel au composant Auth :

AuthComponent::user('id')
AuthComponent::user('role')
etc ...

À partir du moment où le composant Auth est utilisé, si un système d'autorisation n'est pas défini explicitement, il bloque quasiment tous les accès et comme le modèle par défaut est User et l'action login, il renvoit sur l'action login du controller Users.

Le composant Auth est également appelé dans le modèle Category.

Sur Cake 2 ? 3 ?
Bonjour, eh bien dans ton AppController tu doit avoir une ligne du style pour Cake 3

'loginAction' => [
                'controller' => 'Users',
                'action' => 'login',
                'prefix'=> false
            ],

Ou sur Cake 2

public $components = array(
        'Session',
        'Auth' => array(
            'loginRedirect' => array('controller' => 'users', 'action' => 'login'),
            'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home')
        )
    );

Au passage la doc

sylvain
Auteur

non il n'y a pas de component Auth dans AppController , ni nulle part d'ailleurs. C'est ca qui est mysterieux

Ba crée le alors ^^

sylvain
Auteur

mais non il fonctionne. c'est ca le probleme, et je ne sais pas comment ca fonctionne.
cependant en erreur

#3 {main}
2015-03-23 01:32:08 Error: [MissingControllerException] Controller class AdminController could not be found.
Exception Attributes: array (
  'class' => 'AdminController',
  'plugin' => NULL,
)
Request URL: /labo/admin
Stack Trace:
#0 /Users/sylvain/Sites/labo/app/webroot/index.php(118): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))

tes routes sont comment ?

sylvain
Auteur

voila ma route

   $admin = 'admin';
    Router::connect('/', array('controller' => 'home', 'action' => 'index'));
    Router::connect('/admin', array('controller' => 'Drashboard', 'action' => 'index', 'admin' => true));
    Router::connect('/default', array('controller' => 'pages', 'action' => 'display', 'home'));
    Router::connect('/', array('controller' => 'home', 'action' => 'index'));
/**
 * ...and connect the rest of 'Pages' controller's URLs.
 */
    Router::connect('/item/*', array('controller' => 'item', 'action' => 'index'));

Au passage cest pas plutot Dashboard au lieu de Drashboard ? et la je ne sais pas du tout mais pourquoi tu as $admin ?

sylvain
Auteur

je reprends du code et je ne comprend pas tout, mais bon c'est juste que le precedent dev, il est a mal othographié le drashboard, mais comme il a bien mis partout ca marche.
Le probleme aujourdhui c'est que je ne comprends pas comment il fonctionne admin

Pour moi sa devrais fonctionné, dans boostrap ou config tu as bien decomenté le prefix ?

Bonjour.
L'erreur retournée est plutôt simple à comprendre pourtant :

Controller class AdminController could not be found

CakePHP te dit que le controller admin n'est pas trouvé.
Il ne te faut pas oublier d'activer le prefixe admin dans le fichier core.php.

Configure::write('Routing.prefixes', ['admin']);

non mais normalement vu ces routes il devrait acceder a DashboardController

sylvain
Auteur

J'ai régardé le core et le prefix admin semble etre bien present.
Ce qui me semble, c'est qu'il a shunter le system de cakephp et mis en place son systeme.

non mais normalement vu ces routes il devrait acceder a DashboardController

Sauf que si l'erreur qui lui est retournée est que CakePHP cherche le controller admin mais ne le trouve pas, c'est qu'il y a un problème.

non il n'y a pas de component Auth dans AppController , ni nulle part d'ailleurs. C'est ca qui est mysterieux

Ba crée le alors ^^

mais non il fonctionne. c'est ca le probleme, et je ne sais pas comment ca fonctionne.

Tu dis qu'il n'y a le component Auth nulle part alors que juste après tu dis qu'il fonctionne bien ?
Il faudrait savoir et si CakePHP renvois sur l'action de connexion par défaut, c'est forcément que le composant Auth est utilisé quelque part et que l'application est configuré pour l'utiliser, regardes bien si quelque part tu as un $this->Auth... (un $this->Auth->allow par exemple) ou une fonction isAuthorized dans un controller.

De toute manière, comme ça nous ne pouvons pas trop t'aider, si tu as repris l'application de quelqu'un d'autre, que tu l'as sous les yeux mais que tu ne trouves pas d'où ça peut venir, ce sera plus difficile pour nous.
Pourquoi tu ne demandes pas des précisions à la personne à qui tu as pris la suite ?

Le composant Auth est utilisé dans un controller (Users).

sylvain
Auteur

Bon si j'ai bien compris
la route ci présente

 Router::connect('/admin', array('controller' => 'Drashboard', 'action' => 'index', 'admin' => true));

dit que si je tape /admin je serais redirigé vers Dashboard index
hors le controller dashboard est vide

class DrashboardController extends AppController {
    public function admin_index(){

    }  
}

Question que je me pose, comment devine t'il que je dois me loggue et a surtout a quel moment il me redirige vers /users/login ?

Tout ce passe dans la fonction isAuthorized

sylvain
Auteur

Je ne vois pas a quel moment il fait appel a isAuthorized dans le code

sylvain
Auteur

excellent merci , je comprend mieux maintenant.