多个登录表单提交一个登录操作

时间:2010-07-21 19:02:48

标签: php authentication cakephp

我的(蛋糕)应用程序中有2个登录表单。一个在主页上(由页面控制器提供),一个在我的用户控制器中。我的用户控制器中的那个工作正常。但是当我尝试从主页登录时,我得到一个空白页面,我在firebug中看到我得到了404.奇怪的是会话设置正常。

看起来它与$ this-> Auth-> autoRedirect = false(在用户控制器beforeFilter()中设置)有关。可能是什么问题?

这是我的登录操作的样子:

  function login()
  {
    /* Werkt nog niet vanuit `home login` */
    if ($this->Auth->user())
    {
      if(!empty($this->data))
      {
        /* Update last login */
        $this->User->id = $this->Auth->user('id');
        $this->User->saveField('last_login', date('Y-m-d H:i:s'));
      }
      $this->redirect($this->Auth->redirect());
    }
  }

2 个答案:

答案 0 :(得分:0)

设置$this->Auth->autoRedirect = false后,需要在登录尝试后手动重定向login()方法,f.ex。 $this->redirect($this->referer());。我想,由于没有重定向或错误的重定向,你有空白页面。该空白页面的网址是什么?

答案 1 :(得分:0)

在尝试了我能想到的一切之后,我最后的希望就是不使用(默认)页面控制器。所以我做的是将它复制到我的应用程序/控制器并使它看起来像:

<?php
class PagesController extends AppController
{
  var $name = 'Pages';
  var $uses = array();

  var $__allowUnAuthorized = array('*');
  var $__allowAuthorized = array();

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

    $this->Auth->allow($this->__allowUnAuthorized);
  }

  function display()
  {
    // Same as default
  }
}

我还将一些东西从我的user_controller移到我的app_controller:

<?php
class AppController extends Controller
{
  var $name = 'App';
  var $components = array('Auth', 'Security', 'Session');
  var $helpers = array('Html', 'Form', 'Session');

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

    /* Auth */
    $this->Auth->autoRedirect = false;

    $this->Auth->loginAction = array(
      'controller' => 'users',
      'action' => 'login'
    );
    $this->Auth->loginRedirect = array(
      'controller' => 'users',
      'action' => 'index'
    );
    $this->Auth->loginError = __(
      'Ongeldige conbinatie van gebruikersnaam en wachtwoord', true
    );
    $this->Auth->authError =  __(
      'U bent niet bevoegd om deze pagina te bekijken' ,true
    );

    $this->Session->delete('Auth.redirect');
  }
}
?>

现在一切正常!也许它与页面控制器无法访问$ this-&gt; Session或$ this-&gt; Auth?