2013-04-03 14 views
5

Zaczynam od CakePHP i mam problem z ustawieniem komponentu Auth. Za każdym razem, gdy użytkownik się wyloguje, ciasto przekierowuje je z powrotem do logowania. Zobaczysz, że próbuję usunąć/anulować niektóre pliki cookie podczas wylogowywania(). Dzieje się tak, ponieważ konfiguruję pojedyncze logowanie w witrynie Wordpress, więc chcę, aby użytkownik był wylogowywany z obu stron.Authentykacja CakePHP przekierowuje do logowania po logOUT

My 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

Czy chcesz przekierować na inną stronę przy wylogowaniu? – summea

+0

Idealnie byłoby przekierować po wylogowaniu, ale tak naprawdę nie obchodzi mnie to. Teraz uruchamia moją akcję login, która powoduje, że użytkownik pozostaje zalogowany nawet po przekierowaniu. To jest dla mnie kompletnie kłopotliwe, dlaczego akcja logowania powinna mieć jakikolwiek udział w procesie wylogowywania (example.com/users/logout/) – emersonthis

+0

Czy próbowałeś po prostu użyć poniższego wiersza w swojej funkcji 'logout()'? Ostatnim razem pracowałem nad projektem testowym ... Używałem tylko tej linii: '$ this-> redirect ($ this-> Auth-> logout());' Chyba że konkretnie potrzebujesz tych linii związanych z plikami cookie powyżej .. – summea

Odpowiedz

1

Wydaje się nie mieć dostęp do strony bez logowania. (Można spróbować dostępu do adresu URL bez logowania po prostu to sprawdzić)

Rozwiązaniem jest dodanie tej beforeFilter funkcję w swojej PagesController:

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

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

Dzięki. Co powinienem przekazać do beforeFilter w PagesController? Czy jest to mylące, że niezalogowany użytkownik CAN może odwiedzić stronę główną, do której prowadzą przekierowania? – emersonthis

0

PagesController weźmie beforeFilter z AppController. Co mogę zrobić, to:

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

Nie potrzebujesz zezwolenia na wylogowanie, ponieważ wylogowanie nie ma widoku. Kontroler app beforeFilter powinien wyglądać następująco:

public function beforeFilter() { 
    $this->Auth->allow('index', 'view', 'display'); 
} 
Powiązane problemy