Cakephp重定向没有引用的链接

时间:2012-08-30 18:17:15

标签: php cakephp redirect cakephp-2.0 before-filter

我有一个提交页面,它是一个ajax弹出窗口。如果用户未登录,则会弹出模式登录/注册对话框。登录后,它们将被定向到主页面,因为它不记得引用的内容(因为所有这些都是作为登录页面触发的 - 而不是实际的提交页面)。

我正在考虑在会话中保存重定向网址,这样当他们成功登录时,我可以将它们重定向到beforeFilter()中的相应页面或其他内容......

我在考虑这样的事情(伪):

public function submit() {
    if (!$this->Auth->login()) {
        $this->Session->set('Auth.redirect', '/submit');
    }
}

然后在我的beforeFilter中检查登录时是否存在,如果存在,删除会话并将其重定向到该URL?

有没有更好的方法来解决这个问题,还是我的合法?

我的beforeFilter:

public function beforeFilter() {
    $this->Auth->loginRedirect = array('controller' => '', 'action' => 'login');

    $this->Auth->allow(
            'Search',
            'loginSignUpPrompt'
            );
}

2 个答案:

答案 0 :(得分:2)

实际上,Auth组件已经内置了此功能。

public function login() {
  if ($this->request->is('post')) {
    if ($this->Auth->login()) {
      return $this->redirect($this->Auth->redirect());
    } else {
      $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
    }
  }
}

此方法的默认值是用户来自的页面。但是如果你想要它,可以在Auth设置中覆盖。

请参阅http://book.cakephp.org/2.0/en/core-libraries/components/authentication.html有关“识别用户并将其登录”

的部分

答案 1 :(得分:1)

除非用户必须输入某种表单数据(例如在您的登录示例中),否则您可以使用$this->redirect($this->referer());。当我遇到像这样的实例时,我几乎做你正在做的事情,并将先前的URL存储在会话变量中,然后在我将它们重定向回原始URL时销毁该变量。您可能对使用here感兴趣的beforeRedirect()回调组件。