CakePHP登录重定向

时间:2011-05-11 16:05:13

标签: php cakephp

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

    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()));
        }
    }
}

当用户使用站点标题中的登录表单成功登录时,这基本上将用户重定向到他们的上一页但是如果他们直接从登录页面登录它将它们发送到主页,因为他们的上一页将是登录表单

然而问题是,如果用户访问需要身份验证的页面,那么他们将被重定向到登录页面然后登录,但因为他们现在访问了登录页面,他们将被重定向到主页而不是他们之前的他们试图访问的页面。

如何解决此问题?

由于

2 个答案:

答案 0 :(得分:2)

如果我没记错(在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_controler

中有类似内容
$this->Auth->loginRedirect = array('controller' => 'home', 'action' => 'index');

答案 1 :(得分:-1)

有两个或三个选项,一个在我看来好得多

选项1 - 嵌入表格(首选)

  1. 当它们被重定向到登录页面时,将上一页网址作为GET参数嵌入到登录URL中
  2. 获取该get参数并将其添加为登录表单中的隐藏输入值
  3. 在上面的登录代码中,检查是否存在此值并重定向到该值(如果存在)。
  4. 选项2 - 记住会话

    1. 在重定向到登录页面之前,将上一页网址存储在会话
    2. 登录后,检查是否存在上一页值,如果存在则重定向,并从会话中删除。
    3. 选项3 - 在URL处显示登录页面,而不是重定向到登录页面。

      1. 不是显示未经授权的网页重定向,而是将其保留在所需的网址上,但会显示登录表单
      2. 然后您的代码将按照需要运行。