2013-04-03 10 views
5

Iniziamo con CakePHP e sto riscontrando un problema durante l'impostazione del componente Auth. Ogni volta che un utente si disconnette, la torta sta reindirizzandoli al login. Vedrete che sto cercando di eliminare/rimuovere alcuni cookie durante il logout(). Questo perché sto configurando un unico accesso con un sito Wordpress, quindi voglio che l'utente sia disconnesso da entrambi i siti.Componente auth CakePHP reindirizza per accedere dopo logOUT

mio AppController:

class AppController extends Controller {  

public $components = array(
    'Session', 
    'Cookie', 
    'Auth'  => array(
     'loginRedirect'  => array('controller' => 'questions', 'action' => 'index'), 
     'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home')    
    ) 
); 
public function beforeFilter() { 
    $this->Auth->allow('index', 'view', 'login', 'logout', 'display'); 
} 
} 

UsersController:

class UsersController extends AppController { 

public function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('add', 'logout', 'login'); 
} 

...

public function login() { 
//who cares 
} 

public function logout() { 

    $wp_cookie = grab_wp_cookie(); //this grabs a specific cookie 
    $cookie_name = (isset($wp_cookie['name'])) ? $wp_cookie['name'] : NULL; 
     //NONE OF THESE WORK... 
    $this->Cookie->write($cookie_name, '', false, time()-3600); 
    $this->Cookie->delete($cookie_name); 
    $this->Cookie->destroy(); 

    $this->redirect($this->Auth->logout()); 
} 
+0

È necessario reindirizzare a una pagina diversa al momento del logout? – summea

+0

Idealmente, vorrei reindirizzare dopo il logout, ma non mi interessa davvero. In questo momento, attiva la mia azione di login che comporta il login dell'utente anche dopo il reindirizzamento. Mi confonde completamente il motivo per cui l'azione di login dovrebbe essere coinvolta nel processo di logout (example.com/users/logout/) – emersonthis

+0

Hai provato ad usare la seguente riga nella tua funzione 'logout()'? L'ultima volta che stavo lavorando a un progetto di test ... Ho usato solo questa linea: '$ this-> reindirizzamento ($ this-> Auth-> logout());' A meno che tu non abbia specificamente bisogno di quelle linee relative ai cookie sopra .. – summea

risposta

1

Sembra non si ha accesso alla pagina senza essere collegati. (Si può provare accedendo all'URL senza essere collegati solo per controllarlo)

La soluzione è quella di aggiungere questa funzione beforeFilter a vostra PagesController:

public function beforeFilter(){ 
    parent::beforeFilter(); 

    $this->Auth->allow(); 
} 
+0

Grazie. Cosa devo passare a beforeFilter nel PagesController? Inoltre, è confuso che un utente non registrato possa visitare la home page, che è il punto in cui il logout viene reindirizzato a? – emersonthis

0

il PagesController avrebbe preso la beforeFilter del AppController. Quello che potrei fare è questo:

/** 
* GET /users/logout 
*/ 
public function logout() { 
    $this->Auth->logout(); 
    $this->redirect(array('controller' => 'pages', 'action' => 'display', 'home')); 
} 

Non è necessario un permesso al logout perché il logout non ha una vista. Il controller app beforeFilter dovrebbe apparire come segue:

public function beforeFilter() { 
    $this->Auth->allow('index', 'view', 'display'); 
} 
Problemi correlati