Cakephp Auth组件 - 主页重定向循环

时间:2012-01-25 10:31:55

标签: cakephp cakephp-2.0

我想在我的主页上有一个登录表单,注册用户应该重定向到users / index

使用以下代码,我的主页将重定向循环
谁能告诉我问题在哪里?

注意: - 实际上,如果我将行更改为

,它将完美地工作
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');

App Controller

  public function beforeFilter(){
            $this->Auth->autoRedirect = false;
            $this->Auth->loginAction = array('controller' => './', 'action' => 'index');
            $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'index');
            $this->Auth->logoutRedirect = array('controller' => './', 'action' => './');
            $this->Auth->authorize = 'controller';
            $this->Auth->authError= 'You need permissions to access this page';
            $this->Auth->allow('index');
            $this->set('Auth',$this->Auth);

        }

UsersController

public function login(){
        $id = $this->Auth->user('id');
        if(empty($id)){
            if($this->request->is('post')){
                if($this->Auth->login()){
                    $this->redirect($this->Auth->redirect());   
                }else{
                    $this->Session->setFlash('Invalid Username or password');
                }
            }
        }else{
            $this->redirect(array('action'=>'index'));
        }   
    }

感谢您的帮助...

3 个答案:

答案 0 :(得分:1)

你几乎回答了自己的问题:

  

注意: - 实际上,如果我将行更改为

,它将完美地工作      

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

确实这会起作用,这应该是它的样子。现在,您告诉auth组件您的loginAction(保存您的登录逻辑的操作)是index控制器的./操作(甚至不存在)。我假设你将它与loginRedirect变量混淆,后者用于在成功验证后设置页面。

答案 1 :(得分:0)

如果您只想让注册用户访问您的网站,您可以拥有类似的内容......至少,这是我在我的网站中实现类似内容的方式......

在app_controller文件中,将以下内容添加到beforeFilter()函数的开头

function beforeFilter(){
    //Check if user was able to log in thru Auth using your form in the homepage
    if($this->isLoggedIn() == TRUE){
        $this->layout = 'default'
    }else{
        // You can created this layout with a login form and 
        // whatever else you need except <?php echo $content_for_layout; ?>
        // Any registered user will be allowed to login using the form
        // and continue on to your site using the default layout
        // But it guarantees no one else can see your default site
        $this->layout = "unregistered_user"
    }
}

在App_controller.php上,您可以创建此功能

function isLoggedIn(){
    // You can also use $this->Auth->user directly in your App's beforeFilter()
    // But I just like to have functions so I can reuse
    if($this->Auth->user()){
       $loggedin= TRUE;
    }else{
        $loggedin= FALSE;
    }
    return $loggedin;
}

我的网站类似,但只在维护模式下使用。我还在开发我的网站。我用这种方式看到的唯一问题,我还没有时间/需要看,是我的错误没有发送到我想要的布局。假设用户输入http://www.mydomain.com/inexistentpage然后蛋糕将它们转移到我的默认布局。它可能很容易修复,但我没有时间这样做。

注意:我很快就做到了这一点,因此,此代码未经测试。但是,如果您有任何问题,请告诉我,我会测试并发回。

答案 2 :(得分:0)

在视图中使用$this->requestAction(anotherController/action);可能会调用另一个控制器 - &gt;操作。您必须确保另一个控制器 - &gt;操作具有正确的权限。或者你会得到重定向循环。

通过将$this->auth->allow('action name');添加到beforeFilter()回调中的另一个控制器页面来解决它。