Erreur déconnexion Cakephp3

Par Houdette, il y a 10 ans


****Bonjour,
J'essaye depuis plusieurs jours de resoudre un probleme de deconnexion avec Cakephp3.
J'ai suivi le tutoriel "auth" sur la documentation.
Pour l'inscription/connexion tout est OK
le seul probleme c'est lorsque je souhaite me deconnecte /users/logout
j'ai cette erreur que je ne comprends pas:

Error: Call to undefined method Cake\Controller\Component\AuthComponent::redirect()
File /media/htdocs/cakephp/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php
Line: 632

Si vous avez une idee ?

Merci d'avance.

23 réponses

Muxabble, il y a 10 ans

Dans le AppControlle tu as bien

$this->loadComponent('Auth');
Muxabble, il y a 10 ans

Montre ton code, tu as bien utiliser les use ?
L'erreur est explicite, il n'arrive pas à définir la classe statique redirect, donc dans le AppController elle ne doit pas être chargé

Houdette, il y a 10 ans

Oui, voici les use utilise:
namespace App\Controller:
use App\Controller\AppController;
use Cake\Event\Event;
use Cake\Network\Exception\NotFoundException;
use App\Controller\AuthComponent;

La methode beforeFilter:

public function beforeFilter(Event $event)
{
    parent::beforeFilter($event);
    $this->Auth->allow(['add','logout']);

}

Et Logout:

    public function logout()
{
    return $this->redirect($this->Auth->logout());
    $this->Flash->success('Vous êtes maintenant déconnecté.');
}

EDIT:

Si, la classe est bien charge j'utilise redirect pour le login par exemple:

public function login(){

    if($this->Auth->user()){

        //return $this->redirect($this->Auth->redirectUrl('users/index'));

    }
    if ($this->request->is('post')) {

        $user = $this->Auth->identify();

        if ($user) {

            $this->Auth->setUser($user);
          return $this->redirect($this->Auth->redirectUrl('users/index'));

        }

        $this->Flash->error(__("Nom d'utilisateur ou mot de passe incorrect, essayez à nouveau."));
    }
}
Houdette, il y a 10 ans

Oui bien sur, voici le code:

public function initialize()
{
$this->loadComponent('Flash');

    $this->loadComponent('Auth', [
        'authenticate' => [
            'Form' => [
                'fields' => ['username' => 'email', 'password' => 'password']]]
]);}
Muxabble, il y a 10 ans

essaye redirectUrl(); seul sans rien dedans ?

Houdette, il y a 10 ans

J'ai deja essayer mais sans success :/
J'ai la meme erreur.

Houdette, il y a 10 ans

Bonjour,

J'ai exactement fait ca:

public function logout()
{
    $this->Auth->logout();
    $this->Flash->success('Vous êtes maintenant déconnecté.');
    return $this->redirect($this->Auth->redirectUrl('users/login'));

}

Mais toujours le meme probleme:
Error: Call to undefined method Cake\Controller\Component\AuthComponent::redirect()

Muxabble, il y a 10 ans

Je pense que c'est soi le ('user/login') qui bloque ou soit un problème au niveau de l'AppController

Houdette, il y a 10 ans

Pour la le Controlleur Users

<?php namespace App\Controller; use App\Controller\AppController; use Cake\Event\Event; use Cake\Network\Exception\NotFoundException; class UsersController extends AppController { public function beforeFilter(Event $event) { parent::beforeFilter($event); $this->Auth->allow(['add','logout','edit','index']); } public function index() { if($this->Auth->user()){ echo 'Hello '. $userName = $this->Auth->user('first_name'); // $this->set('users', $this->Users->find('all')); } else{ $this->redirect('users/login'); } } public function view($id) { if (!$id) { throw new NotFoundException(__('utilisateur non valide')); } $user = $this->Users->get($id); $this->set(compact('user')); } public function add() { $user = $this->Users->newEntity(); if ($this->request->is('post')) { $user = $this->Users->patchEntity($user, $this->request->data); if ($this->Users->save($user)) { $this->Flash->success(__("L'utilisateur a été sauvegardé.")); return $this->redirect(['action' => 'index']); } $this->Flash->error(__("Impossible d'ajouter l'utilisateur.")); } $this->set('user', $user); } public function login(){ if($this->Auth->user()){ return $this->redirect($this->Auth->redirectUrl('users/index')); } if ($this->request->is('post')) { $user = $this->Auth->identify(); if ($user) { $this->Auth->setUser($user); return $this->redirect($this->Auth->redirectUrl('users/index')); } $this->Flash->error(__("Nom d'utilisateur ou mot de passe incorrect, essayez à nouveau.")); } } public function edit() { $user = $this->Users->get($this->Auth->user('id')); if ($this->request->is(['post'])) { $this->Users->patchEntity($user, $this->request->data); // $user->id = $this->Auth->user('id'); if ($this->Users->updateAll($user)) { $this->Flash->success(__('Votre article a été mis à jour.')); return $this->redirect(['action' => 'index']); } $this->Flash->error(__('Impossible de mettre à jour votre article.')); } $this->set('user', $user); } public function logout() { $this->Auth->logout(); $this->Flash->success('Vous êtes maintenant déconnecté.'); return $this->redirect($this->Auth->redirectUrl('users/login')); } }

et appController:

<? namespace App\Controller; use Cake\Controller\Controller; use Cake\Event\Event; class AppController extends Controller { //... public function initialize() { $this->loadComponent('Flash'); $this->loadComponent('Auth', [ 'authenticate' => [ 'Form' => [ 'fields' => ['username' => 'email', 'password' => 'password']]] ]);} public function beforeFilter(Event $event) { $this->Auth->allow(['index', 'view', 'display']); } }
Houdette, il y a 10 ans

J'ai compris tes explications merci :)

Cependant j'ai essayer ta methode logout, mais j'ai toujours la meme erreur

Error: Call to undefined method Cake\Controller\Component\AuthComponent::redirect()
File /media/htdocs/cakephp/vendor/cakephp/cakephp/src/Controller/Component/AuthComponent.php
Line: 632

Muxabble, il y a 10 ans
return $this->redirectUrl(['Controller' => 'Users', 'action' => 'login']);

Essaye cela

antograssiot, il y a 10 ans

la documentation officielle préconise la syntaxe suivante

public function logout() { return $this->redirect($this->Auth->logout()); }

et si tu le couple avec la config suivante, cela doit fonctionner.

$this->loadComponent('Auth', [ ... 'logoutRedirect' => ['controller' => 'Mycontroller', 'action' => 'myaction], ]);

J'utilise ce code dans plusieurs app sans problème particuler.
Voici le lien vers la partie connectino du tutoriel de blog

http://book.cakephp.org/3.0/en/tutorials-and-examples/blog-auth-example/auth.html#authentication-login-and-logout

Houdette, il y a 10 ans

Merci pour vos reponses mes ça ne marche toujours pas j ai toujours la meme erreur :/

antograssiot, il y a 10 ans

Quelle est ta version de CakePHP exactement ?

antograssiot, il y a 10 ans

A moins que tu utilises ta propore version du AuthComponent, tu devrais enlever le

use App\Controller\AuthComponent;
Houdette, il y a 10 ans

c'est cake php 3 qu est ce que tu veux dire par ma propre version AuthComponenet?

antograssiot, il y a 10 ans

je veux connaitre la version de CakePHP 3.0.x (le x m'interesse).
Enfin elève la ligne que je t'ai demandé.

use App\Controller\AuthComponent; signifie que tu veux charger un fichier situé dans src/Controller/AuthComponent !!?

Houdette, il y a 10 ans

c'est juste version 3

antograssiot, il y a 10 ans

Je vais essayer une dernier fois... de quand date ton dernier composer update ?

Houdette, il y a 10 ans

meme pas une semaine

antograssiot, il y a 10 ans

et quand tu enlève la ligne que je t'ai demandé dans ton UsersController ?

Houdette, il y a 10 ans

je l'ai déjà enlevé et ça ne marche pas

Houdette, il y a 10 ans

ça a marché finalement j'ai juste supprimé le dossier vendor merci pour vos idées