CakePHP Auth bileşeni yönlendirme sorunu

2 Cevap php

Ben sorun Auth bileşeni bir CakePHP 1.2.6 app istediğiniz yönlendirmeler yapmak alıyorum yaşıyorum.

Ben tüm sayfalarda görünen bir giriş formu var ve ben onun üzerinde günlükleri sayfada kullanıcıyı tutmak istiyorum. O başka bir kullanıcının profilini inceleyen Örneğin, ben $this->Auth->loginRedirect eylem onu ​​yönlendirmek, giriş yaptıktan sonra onu orada yok tutmak istiyorum. Ayrıca, benim uygulaması hakkında başka bir şey yok "doğrulanmış erişimi sadece" sayfaları, her sayfa herkes için erişilebilir var, ama giriş demektir eğer ek özellikleri elde olmasıdır.

Ne okuma anladım documentation Ben yürütülecek giriş () fonksiyonu kodu almak için autoRedirect false ayarlamanız gerekir ki:

class UsersController extends AppController {    
    var $name = 'Users';
    var $helpers = array('Html', 'Form','Text');

    function beforeFilter() {
        $this->Auth->autoRedirect = false;
    }

    function login() {
        $this->redirect($this->referer());
    }

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

    /* [...] */
}

Bu şu anda benim kimlik doğrulaması keser. Ben (günlükleri) fark ettik ki ben oturum açma işlevi yönlendirme bırakmak ve false autoRedirect ayarlarsanız, $this->data in parola alanı {[(2)] } işlev olarak boş görünür.

Aşağıda, ben Auth bileşenle ilgili AppController içeriğini gönderdiniz:

public function beforeFilter() {

    $this->Auth->fields = array(
        'username' => 'email',             
        'password' => 'password'            
    );

    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');     
    $this->Auth->loginRedirect = array('controller' => 'usercars', 'action' => 'homepage');

    $this->allowAccess();

    // build wishlist if the user is logged in
    if ($currentUser = $this->Auth->user()) {
        $wishlists = $this->buildWishlist($currentUser);
        $this->set('wishlists', $wishlists);
    }

}

private function allowAccess() {
      if(in_array($this->name, /* all my controller names */)) {
          $this->Auth->allow('*');
      }
}

Ben ne yapıyorum yanlış anlamak için görünmüyor olabilir.

2 Cevap

Ebeveyn Ekle :: beforeFilter (); Kullanıcı kontrol olarak beforeFilter için:

function beforeFilter() {
    $this->Auth->autoRedirect = false;
    parent::beforeFilter();
}

Ayrıca kullanıcı denetleyicisi giriş yöntemi ile bu yönlendirmeyi değiştirebilirsiniz:

$this->redirect($this->Auth->redirect());

Auth-> yönlendirme () kullanıcı oturum açma sayfasına alınır veya Auth-> loginRedirect önce indi url döndürür.

Controller için bu kodu koyun:

function beforeFilter() {
    $this->Auth->allow('login', 'logout');
    $this->Auth->autoRedirect = false;
    parent::beforeFilter();
}

ve, giriş sayfası için bu ekleyin:

function login() {
    if($this->Auth->User()) {
        $this->redirect(array('action'=>'welcome'), null, true);
    }
}