CakePHP登录重定向

CakePHP登录重定向,php,cakephp,Php,Cakephp,我的登录方法中有以下代码: if(!(empty($this->data)) && $this->Auth->user()) { if($this->referer(array('controller' => 'users', 'action' => 'login'))) { $this->redirect(array('controller' => 'hom

我的登录方法中有以下代码:

    if(!(empty($this->data)) && $this->Auth->user())
    {

        if($this->referer(array('controller' => 'users', 'action' => 'login')))
        {
            $this->redirect(array('controller' => 'home', 'action' => 'index'));
        }
        else
        {
            $this->redirect($this->Auth->redirect($this->referer()));
        }
    }
}
当用户使用站点标题中的登录表单成功登录时,这基本上会将用户重定向到上一页,但如果用户直接从登录页面登录,则会将其发送到主页,因为上一页就是登录表单

然而,问题是,如果用户访问需要验证的页面,那么他们将被重定向到登录页面,然后再登录,但是由于他们现在访问了登录页面,因此他们将被重定向到主页,而不是他们试图访问的上一页

如何解决此问题


谢谢

有两三种选择,我认为其中一种更好

选项1-嵌入形式(首选)
  • 当它们被重定向到登录页面时,将上一个页面URL作为GET参数嵌入登录URL中
  • 获取该get参数,并将其作为隐藏输入值添加到登录表单中
  • 在上面的登录代码中,检查是否存在此值,如果存在,则重定向到该值
  • 选项2-在会话中记住
  • 在将它们重定向到登录页面之前,请在会话中存储上一个页面URL
  • 登录后,检查是否存在上一个页面值,如果存在则重定向,然后将其从会话中删除
  • 选项3-在URL处显示登录页面,而不是重定向到登录页面。
  • 不要显示未经授权的页面或重定向,而是将它们保留在所需的URL上,但要显示登录表单
  • 然后,上面的代码将按需要工作
  • 如果我没有记错(1.3中没有确认),您可以将默认重定向设置为
    home
    ,并检查重定向路径是否由Auth组件设置

    在您的登录操作中类似于此

    $auth_redirect = $this->Session->read("Auth.redirect");
    if(isset($auth_redirect) && $auth_redirect != "") {
        $this->redirect($auth_redirect);
    } else { 
        $this->redirect('/home/index')
    }
    
    在你的
    app\u控制器中有类似的东西

    $this->Auth->loginRedirect = array('controller' => 'home', 'action' => 'index');
    

    您意识到
    $this->Auth->redirect()
    会自动为您执行此操作,对吗?如果($this->referer(数组('controller'=>'users','action'=>'login'))
    这意味着什么
    Controller::referer()
    method return value(URL)的计算结果始终为
    true
    。CakePHP已经检查了会话中是否存在数据,如果没有,则将其发送到默认重定向,那么上面的代码会做什么?如果关闭自动重定向(OP正在执行的操作),则此代码将启动。是的,但是如果您提供了
    $this->redirect($this->Auth->redirect()),当autoRedirect设置为false时,框架会自动将用户重定向到上一个调用的操作(如果需要身份验证)事件@Cameron嗯,你说得对。我想我最初可能只是想让OP将
    $this->referer()
    调用替换为
    Auth.redirect
    。你应该把它贴出来作为答案。