0

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

我正在考虑可能在会话中保存该重定向 url,这样当他们成功登录时,我可以将它们重定向到我beforeFilter()或其他东西中的适当页面......

我在想这样的事情(伪):

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

然后在我的 beforeFilter 中检查他们登录时是否存在,如果存在,删除 Session 并将它们重定向到该 url?

有没有更好的方法来处理这个问题还是我的合法?

我的前置过滤器:

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

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

2 回答 2

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关于“识别用户并登录”的部分

于 2012-08-30T19:06:54.573 回答
1

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

于 2012-08-30T18:41:11.810 回答