2013-04-03 27 views
5

CakePHP ile çalışmaya başladım ve Auth bileşenini ayarlamada sorun yaşıyorum. Her kullanıcı çıkış yaptığında, pasta giriş yapmak için tekrar yönlendiriyor. Logout() sırasında bazı çerezleri silmeye/kaldırmaya çalıştığımı göreceksiniz. Bunun nedeni, bir Wordpress sitesiyle tek bir oturum açacağım, bu yüzden kullanıcının her iki siteden de çıkış yapmasını istiyorum.CakePHP auth bileşeni, oturum açtıktan sonra oturum açmak için yeniden yönlendiriyor

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

... Size açmış olmadan sayfaya erişim yok gibi görünüyor

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

Bu, çıkışta farklı bir sayfaya yönlendirmek istiyor mu? – summea

+0

İdeal olarak çıkıştan sonra yönlendirme yapardım, ama gerçekten umrumda değil. Şu anda, yeniden yönlendirme işleminden sonra bile kullanıcının giriş yapmasına neden olan oturum açma eylemimi tetikler. Oturum açma eyleminin çıkış işleminde neden yer alması gerektiği bana tamamen kafa karıştırıcı (example.com/users/logout/) – emersonthis

+0

'logout()' işlevinde sadece aşağıdaki satırı kullanmayı denediniz mi? En son bir test projesinde çalışıyordum ... Sadece bu satırı kullandım: '$ this-> yönlendirme ($ this-> Auth-> logout());' Özellikle yukarıdaki çerezlerle ilgili satırlara ihtiyacınız olmadıkça .. – summea

cevap

1

.

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

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

Teşekkürler. PagesController'da beforeFilter'a ne geçmeliyim? Ayrıca, oturum açmamış bir kullanıcının ana sayfanızı ziyaret edip, çıkışının yönlendirildiği yer olduğu kafa karıştırıcı mıdır? – emersonthis

0

PagesController AppController ait beforeFilter alacaktı:

çözüm PagesController bu beforeFilter işlevi eklemektir (bunu sadece bunu kontrol etmek açmış olmadan URL'ye erişmeyi deneyebilirsiniz). Ne yapabilir şudur:

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

Sen çıkış bir görünüme sahip olmadığından bir çıkış yapınca izin gerekmez. olarak görünmelidir beforeFilter uygulama, denetleyici aşağıdaki gibidir:

public function beforeFilter() { 
    $this->Auth->allow('index', 'view', 'display'); 
} 
İlgili konular